├── .gitignore
├── LICENSE
├── README.md
├── bazel
├── .gitignore
├── BUILD
├── Cargo.Bazel.lock
├── Cargo.lock
├── README.md
├── WORKSPACE
├── initial-prompt.png
├── src
│ └── lib.rs
├── sync_rust.sh
└── tree_sitter.bzl
├── generate-website
├── README.md
├── rendered-website.png
├── website.html
└── website.png
├── jitifying-pytorch
├── .gitignore
├── README.md
├── jit.png
└── shift.ipynb
├── kube-tf
├── README.md
├── deployment.png
├── deployment.tf
├── deployment.yaml
└── prompt.txt
├── python-to-c++
├── README.md
├── cc
│ ├── clean.sh
│ ├── csvinteresting-post-gpt-4.cc
│ ├── csvinteresting.cc
│ ├── run_cc.sh
│ └── world-cup-2022
│ │ ├── README.md
│ │ ├── wc_forecasts.csv
│ │ └── wc_matches.csv
├── explain-the-binds.png
├── full-generation-prompt.png
└── py
│ ├── clean.sh
│ ├── csvinteresting.py
│ ├── run_py.sh
│ └── world-cup-2022
│ ├── README.md
│ ├── wc_forecasts.csv
│ └── wc_matches.csv
├── raw-model-fails-to-find-memory-bug
├── README.md
├── memory-bug.png
├── utils-bug.cc
├── utils.cc
└── utils.hpp
└── rocksb-cli
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── README.md
├── bug-fix.png
├── bug-fix.txt
├── cargo.png
├── cli.png
├── spec.txt
└── src
└── main.rs
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Anysphere
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # gpt-4-for-code
2 |
3 | We've been using GPT-4 for a few months internally, and we thought we'd highlight a few examples that have been both particularly impressive and really useful to us. Each folder here contains one example of using GPT-4 for code.
4 |
5 | Read more here: https://twitter.com/sualehasif996/status/1635755267739598848.
6 |
7 | ### Contributions
8 |
9 | Please submit pull requests with more examples!
10 |
11 |
12 | ### Control: the AI code editor
13 |
14 | We're building [Control](https://control.dev/), an AI code editor.
15 |
16 | **Interested in redefining the future of coding?** If you're an amazing design engineer or awesome systems engineer, or just super interested in the problem of AI for code, please reach out to us at arvid@anysphere.co and sualeh@anysphere.co.
17 |
18 | **Want to pilot Control at your company?** We're piloting with a few medium-sized companies (100s of engineers). Our editor is a drop-in replacement for VS Code (works with all of your extensions), and pairs the power of GPT-4 with context about your closed-source codebase. Reach out to us at arvid@anysphere.co and sualeh@anysphere.co.
19 |
--------------------------------------------------------------------------------
/bazel/.gitignore:
--------------------------------------------------------------------------------
1 | bazel-*
--------------------------------------------------------------------------------
/bazel/BUILD:
--------------------------------------------------------------------------------
1 | load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
2 |
3 | rust_library(
4 | name = "example",
5 | srcs = glob(["src/**/*.rs"]),
6 | rustc_flags = [
7 | # we allow unused imports, because they are annoying to avoid while developing
8 | # and we don't want people to ignore warnings! which happens if there are too many warnings
9 | "-Aunused_imports",
10 | # we disallow unused results, because they are almost always bugs
11 | "-Dunused_must_use",
12 | ],
13 | visibility = ["//visibility:public"],
14 | deps = [
15 | "@global_crate_index//:tree-sitter",
16 | "@tree_sitter_python",
17 | "@tree_sitter_rust",
18 | "@tree_sitter_go",
19 | "@tree_sitter_javascript",
20 | "@tree_sitter_typescript",
21 | ],
22 | )
23 |
24 | rust_test(
25 | name = "test",
26 | crate = ":example",
27 | )
28 |
--------------------------------------------------------------------------------
/bazel/Cargo.Bazel.lock:
--------------------------------------------------------------------------------
1 | {
2 | "checksum": "2c1b522e44766ebb40eeb869e7efa112f259b6bed84ba33bf5de8fa8930e4375",
3 | "crates": {
4 | "aho-corasick 0.7.20": {
5 | "name": "aho-corasick",
6 | "version": "0.7.20",
7 | "repository": {
8 | "Http": {
9 | "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.20/download",
10 | "sha256": "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
11 | }
12 | },
13 | "targets": [
14 | {
15 | "Library": {
16 | "crate_name": "aho_corasick",
17 | "crate_root": "src/lib.rs",
18 | "srcs": [
19 | "**/*.rs"
20 | ]
21 | }
22 | }
23 | ],
24 | "library_target_name": "aho_corasick",
25 | "common_attrs": {
26 | "compile_data_glob": [
27 | "**"
28 | ],
29 | "crate_features": [
30 | "default",
31 | "std"
32 | ],
33 | "deps": {
34 | "common": [
35 | {
36 | "id": "memchr 2.5.0",
37 | "target": "memchr"
38 | }
39 | ],
40 | "selects": {}
41 | },
42 | "edition": "2018",
43 | "version": "0.7.20"
44 | },
45 | "license": "Unlicense OR MIT"
46 | },
47 | "cc 1.0.79": {
48 | "name": "cc",
49 | "version": "1.0.79",
50 | "repository": {
51 | "Http": {
52 | "url": "https://crates.io/api/v1/crates/cc/1.0.79/download",
53 | "sha256": "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
54 | }
55 | },
56 | "targets": [
57 | {
58 | "Library": {
59 | "crate_name": "cc",
60 | "crate_root": "src/lib.rs",
61 | "srcs": [
62 | "**/*.rs"
63 | ]
64 | }
65 | }
66 | ],
67 | "library_target_name": "cc",
68 | "common_attrs": {
69 | "compile_data_glob": [
70 | "**"
71 | ],
72 | "edition": "2018",
73 | "version": "1.0.79"
74 | },
75 | "license": "MIT OR Apache-2.0"
76 | },
77 | "direct-cargo-bazel-deps 0.0.1": {
78 | "name": "direct-cargo-bazel-deps",
79 | "version": "0.0.1",
80 | "repository": null,
81 | "targets": [
82 | {
83 | "Library": {
84 | "crate_name": "direct_cargo_bazel_deps",
85 | "crate_root": ".direct_cargo_bazel_deps.rs",
86 | "srcs": [
87 | "**/*.rs"
88 | ]
89 | }
90 | }
91 | ],
92 | "library_target_name": "direct_cargo_bazel_deps",
93 | "common_attrs": {
94 | "compile_data_glob": [
95 | "**"
96 | ],
97 | "deps": {
98 | "common": [
99 | {
100 | "id": "tree-sitter 0.20.9",
101 | "target": "tree_sitter"
102 | }
103 | ],
104 | "selects": {}
105 | },
106 | "edition": "2018",
107 | "version": "0.0.1"
108 | },
109 | "license": null
110 | },
111 | "memchr 2.5.0": {
112 | "name": "memchr",
113 | "version": "2.5.0",
114 | "repository": {
115 | "Http": {
116 | "url": "https://crates.io/api/v1/crates/memchr/2.5.0/download",
117 | "sha256": "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
118 | }
119 | },
120 | "targets": [
121 | {
122 | "Library": {
123 | "crate_name": "memchr",
124 | "crate_root": "src/lib.rs",
125 | "srcs": [
126 | "**/*.rs"
127 | ]
128 | }
129 | },
130 | {
131 | "BuildScript": {
132 | "crate_name": "build_script_build",
133 | "crate_root": "build.rs",
134 | "srcs": [
135 | "**/*.rs"
136 | ]
137 | }
138 | }
139 | ],
140 | "library_target_name": "memchr",
141 | "common_attrs": {
142 | "compile_data_glob": [
143 | "**"
144 | ],
145 | "crate_features": [
146 | "default",
147 | "std"
148 | ],
149 | "deps": {
150 | "common": [
151 | {
152 | "id": "memchr 2.5.0",
153 | "target": "build_script_build"
154 | }
155 | ],
156 | "selects": {}
157 | },
158 | "edition": "2018",
159 | "version": "2.5.0"
160 | },
161 | "build_script_attrs": {
162 | "data_glob": [
163 | "**"
164 | ]
165 | },
166 | "license": "Unlicense/MIT"
167 | },
168 | "regex 1.7.1": {
169 | "name": "regex",
170 | "version": "1.7.1",
171 | "repository": {
172 | "Http": {
173 | "url": "https://crates.io/api/v1/crates/regex/1.7.1/download",
174 | "sha256": "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
175 | }
176 | },
177 | "targets": [
178 | {
179 | "Library": {
180 | "crate_name": "regex",
181 | "crate_root": "src/lib.rs",
182 | "srcs": [
183 | "**/*.rs"
184 | ]
185 | }
186 | }
187 | ],
188 | "library_target_name": "regex",
189 | "common_attrs": {
190 | "compile_data_glob": [
191 | "**"
192 | ],
193 | "crate_features": [
194 | "aho-corasick",
195 | "default",
196 | "memchr",
197 | "perf",
198 | "perf-cache",
199 | "perf-dfa",
200 | "perf-inline",
201 | "perf-literal",
202 | "std",
203 | "unicode",
204 | "unicode-age",
205 | "unicode-bool",
206 | "unicode-case",
207 | "unicode-gencat",
208 | "unicode-perl",
209 | "unicode-script",
210 | "unicode-segment"
211 | ],
212 | "deps": {
213 | "common": [
214 | {
215 | "id": "aho-corasick 0.7.20",
216 | "target": "aho_corasick"
217 | },
218 | {
219 | "id": "memchr 2.5.0",
220 | "target": "memchr"
221 | },
222 | {
223 | "id": "regex-syntax 0.6.28",
224 | "target": "regex_syntax"
225 | }
226 | ],
227 | "selects": {}
228 | },
229 | "edition": "2018",
230 | "version": "1.7.1"
231 | },
232 | "license": "MIT OR Apache-2.0"
233 | },
234 | "regex-syntax 0.6.28": {
235 | "name": "regex-syntax",
236 | "version": "0.6.28",
237 | "repository": {
238 | "Http": {
239 | "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.28/download",
240 | "sha256": "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
241 | }
242 | },
243 | "targets": [
244 | {
245 | "Library": {
246 | "crate_name": "regex_syntax",
247 | "crate_root": "src/lib.rs",
248 | "srcs": [
249 | "**/*.rs"
250 | ]
251 | }
252 | }
253 | ],
254 | "library_target_name": "regex_syntax",
255 | "common_attrs": {
256 | "compile_data_glob": [
257 | "**"
258 | ],
259 | "crate_features": [
260 | "default",
261 | "unicode",
262 | "unicode-age",
263 | "unicode-bool",
264 | "unicode-case",
265 | "unicode-gencat",
266 | "unicode-perl",
267 | "unicode-script",
268 | "unicode-segment"
269 | ],
270 | "edition": "2018",
271 | "version": "0.6.28"
272 | },
273 | "license": "MIT OR Apache-2.0"
274 | },
275 | "tree-sitter 0.20.9": {
276 | "name": "tree-sitter",
277 | "version": "0.20.9",
278 | "repository": {
279 | "Http": {
280 | "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.9/download",
281 | "sha256": "d4423c784fe11398ca91e505cdc71356b07b1a924fc8735cfab5333afe3e18bc"
282 | }
283 | },
284 | "targets": [
285 | {
286 | "Library": {
287 | "crate_name": "tree_sitter",
288 | "crate_root": "binding_rust/lib.rs",
289 | "srcs": [
290 | "**/*.rs"
291 | ]
292 | }
293 | },
294 | {
295 | "BuildScript": {
296 | "crate_name": "build_script_build",
297 | "crate_root": "binding_rust/build.rs",
298 | "srcs": [
299 | "**/*.rs"
300 | ]
301 | }
302 | }
303 | ],
304 | "library_target_name": "tree_sitter",
305 | "common_attrs": {
306 | "compile_data_glob": [
307 | "**"
308 | ],
309 | "deps": {
310 | "common": [
311 | {
312 | "id": "regex 1.7.1",
313 | "target": "regex"
314 | },
315 | {
316 | "id": "tree-sitter 0.20.9",
317 | "target": "build_script_build"
318 | }
319 | ],
320 | "selects": {}
321 | },
322 | "edition": "2018",
323 | "version": "0.20.9"
324 | },
325 | "build_script_attrs": {
326 | "data_glob": [
327 | "**"
328 | ],
329 | "deps": {
330 | "common": [
331 | {
332 | "id": "cc 1.0.79",
333 | "target": "cc"
334 | }
335 | ],
336 | "selects": {}
337 | }
338 | },
339 | "license": "MIT"
340 | }
341 | },
342 | "binary_crates": [],
343 | "workspace_members": {
344 | "direct-cargo-bazel-deps 0.0.1": ""
345 | },
346 | "conditions": {}
347 | }
348 |
--------------------------------------------------------------------------------
/bazel/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "aho-corasick"
7 | version = "0.7.20"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
10 | dependencies = [
11 | "memchr",
12 | ]
13 |
14 | [[package]]
15 | name = "cc"
16 | version = "1.0.79"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
19 |
20 | [[package]]
21 | name = "direct-cargo-bazel-deps"
22 | version = "0.0.1"
23 | dependencies = [
24 | "tree-sitter",
25 | ]
26 |
27 | [[package]]
28 | name = "memchr"
29 | version = "2.5.0"
30 | source = "registry+https://github.com/rust-lang/crates.io-index"
31 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
32 |
33 | [[package]]
34 | name = "regex"
35 | version = "1.7.1"
36 | source = "registry+https://github.com/rust-lang/crates.io-index"
37 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
38 | dependencies = [
39 | "aho-corasick",
40 | "memchr",
41 | "regex-syntax",
42 | ]
43 |
44 | [[package]]
45 | name = "regex-syntax"
46 | version = "0.6.28"
47 | source = "registry+https://github.com/rust-lang/crates.io-index"
48 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
49 |
50 | [[package]]
51 | name = "tree-sitter"
52 | version = "0.20.9"
53 | source = "registry+https://github.com/rust-lang/crates.io-index"
54 | checksum = "d4423c784fe11398ca91e505cdc71356b07b1a924fc8735cfab5333afe3e18bc"
55 | dependencies = [
56 | "cc",
57 | "regex",
58 | ]
59 |
--------------------------------------------------------------------------------
/bazel/README.md:
--------------------------------------------------------------------------------
1 | ## Bazel generation for tree-sitter
2 |
3 | Scenario:
4 |
5 |
6 | #### Steps
7 |
8 | 1. Ask GPT-4 the following:
9 |
10 | ```
11 | i want to create a .bzl file that can build tree sitter dependencies. in particular, in my WORKSPACE file, i only want to have to write tree_sitter_python(name = ...) or tree_sitter_go(name = ...) and it should just work. could you do this pls and make it generic so it works for most languages with few changes
12 | ```
13 |
14 | 2. Follow up with "now do it for rust, typescript, javascript too"
15 |
16 | 3. Paste the output of `bazel test //...` and ask GPT-4 to fix the bugs.
17 |
18 | 4. You're done. Somewhat esoteric Bazel code, in 2 minutes.
19 |
20 |
21 | #### Screenshots
22 |
23 | The initial prompt:
24 |
25 | 
26 |
27 | The final file: [tree_sitter.bzl](tree_sitter.bzl). GPT-4-generated, in a few iterations with access to build errors.
--------------------------------------------------------------------------------
/bazel/WORKSPACE:
--------------------------------------------------------------------------------
1 | load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
2 |
3 | http_archive(
4 | name = "rules_rust",
5 | sha256 = "aaaa4b9591a5dad8d8907ae2dbe6e0eb49e6314946ce4c7149241648e56a1277",
6 | urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.16.1/rules_rust-v0.16.1.tar.gz"],
7 | )
8 |
9 | load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")
10 |
11 | rules_rust_dependencies()
12 |
13 | rust_register_toolchains(
14 | edition = "2021",
15 | versions = ["1.66.1"],
16 | )
17 |
18 |
19 | load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
20 |
21 | crate_universe_dependencies()
22 |
23 | load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository", "render_config")
24 |
25 | crates_repository(
26 | name = "global_crate_index",
27 | cargo_lockfile = "//:Cargo.lock",
28 | lockfile = "//:Cargo.Bazel.lock",
29 | packages = {
30 | "tree-sitter": crate.spec(
31 | version = "=0.20.9",
32 | ),
33 | },
34 | render_config = render_config(
35 | default_package_name = "",
36 | ),
37 | )
38 |
39 | load("@global_crate_index//:defs.bzl", global_crate_index = "crate_repositories")
40 |
41 | global_crate_index()
42 |
43 |
44 | load(
45 | "//:tree_sitter.bzl",
46 | "tree_sitter_go",
47 | "tree_sitter_javascript",
48 | "tree_sitter_python",
49 | "tree_sitter_rust",
50 | "tree_sitter_typescript",
51 | )
52 |
53 | tree_sitter_python(name = "tree_sitter_python")
54 |
55 | tree_sitter_rust(name = "tree_sitter_rust")
56 |
57 | tree_sitter_go(name = "tree_sitter_go")
58 |
59 | tree_sitter_typescript(name = "tree_sitter_typescript")
60 |
61 | tree_sitter_javascript(name = "tree_sitter_javascript")
--------------------------------------------------------------------------------
/bazel/initial-prompt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/bazel/initial-prompt.png
--------------------------------------------------------------------------------
/bazel/src/lib.rs:
--------------------------------------------------------------------------------
1 | use tree_sitter::{Language, Parser};
2 | use tree_sitter as ts;
3 | extern "C" {
4 | fn tree_sitter_python() -> ts::Language;
5 | fn tree_sitter_rust() -> ts::Language;
6 | fn tree_sitter_go() -> ts::Language;
7 | fn tree_sitter_javascript() -> ts::Language;
8 | fn tree_sitter_typescript() -> ts::Language;
9 | }
10 |
11 | fn main() {
12 | let code = "function test() { return 42; }";
13 |
14 | let language = unsafe { tree_sitter_typescript() };
15 | let mut parser = Parser::new();
16 | parser.set_language(language).unwrap();
17 |
18 | let tree = parser.parse(code, None).unwrap();
19 | let root_node = tree.root_node();
20 |
21 | println!("Root node: {:?}", root_node);
22 | println!("Root node type: {}", root_node.kind());
23 | }
24 |
25 | #[cfg(test)]
26 | mod tests {
27 | use super::*;
28 |
29 | #[test]
30 | fn test_parse_javascript() {
31 | let code = "function test() { return 42; }";
32 |
33 | let language = unsafe { tree_sitter_typescript() };
34 | let mut parser = Parser::new();
35 | parser.set_language(language).unwrap();
36 |
37 | let tree = parser.parse(code, None).unwrap();
38 | let root_node = tree.root_node();
39 |
40 | assert_eq!(root_node.kind(), "program");
41 | assert_eq!(root_node.start_position().row, 0);
42 | assert_eq!(root_node.start_position().column, 0);
43 | assert_eq!(root_node.end_position().row, 0);
44 | assert_eq!(root_node.end_position().column, 30);
45 | }
46 | }
--------------------------------------------------------------------------------
/bazel/sync_rust.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | CARGO_BAZEL_REPIN=1 CARGO_BAZEL_REPIN_ONLY=$1 bazel sync
--------------------------------------------------------------------------------
/bazel/tree_sitter.bzl:
--------------------------------------------------------------------------------
1 | """
2 | GPT-4-generated! A few iterations of (1) instruction and (2) small follow-ups and (3) letting GPT-4 look at the Bazel error messages and fix them.
3 | """
4 |
5 | def _tree_sitter_lang_impl_with_file(repository_ctx, lang, file):
6 | # Get the http archive from the tree-sitter repo
7 | repository_ctx.download_and_extract(
8 | url = "https://github.com/tree-sitter/tree-sitter-" + lang + "/archive/master.zip",
9 | stripPrefix = "tree-sitter-" + lang + "-master",
10 | type = "zip",
11 | # output = "//third_party/tree_sitter_" + lang,
12 | )
13 |
14 | repository_ctx.file(
15 | "WORKSPACE",
16 | content = "",
17 | )
18 |
19 | # Build the cc_lib from src/parser.c and src/scanner.c
20 | repository_ctx.file(
21 | "BUILD",
22 | content = file.format(lang = lang),
23 | )
24 |
25 |
26 | TREE_SITTER_BUILD_FILE_WITH_CC = """cc_library(
27 | name = "tree_sitter_{lang}",
28 | srcs = ["src/parser.c", "src/scanner.cc"],
29 | copts = ["-Iexternal/tree_sitter_{lang}/src"],
30 | hdrs = ["src/tree_sitter/parser.h"],
31 | linkstatic = True,
32 | visibility = ["//visibility:public"],
33 | )
34 | """
35 |
36 | def _tree_sitter_lang_impl_with_cc(repository_ctx, lang):
37 | _tree_sitter_lang_impl_with_file(repository_ctx, lang, TREE_SITTER_BUILD_FILE_WITH_CC)
38 |
39 | TREE_SITTER_BUILD_FILE_WITH_C = """cc_library(
40 | name = "tree_sitter_{lang}",
41 | srcs = ["src/parser.c", "src/scanner.c"],
42 | copts = ["-Iexternal/tree_sitter_{lang}/src"],
43 | hdrs = ["src/tree_sitter/parser.h"],
44 | linkstatic = True,
45 | visibility = ["//visibility:public"],
46 | )
47 | """
48 |
49 | def _tree_sitter_lang_impl_with_c(repository_ctx, lang):
50 | _tree_sitter_lang_impl_with_file(repository_ctx, lang, TREE_SITTER_BUILD_FILE_WITH_C)
51 |
52 | TREE_SITTER_BUILD_FILE_NO_C = """cc_library(
53 | name = "tree_sitter_{lang}",
54 | srcs = ["src/parser.c"],
55 | copts = ["-Iexternal/tree_sitter_{lang}/src"],
56 | hdrs = ["src/tree_sitter/parser.h"],
57 | linkstatic = True,
58 | visibility = ["//visibility:public"],
59 | )
60 | """
61 |
62 | def _tree_sitter_lang_impl_no_c(repository_ctx, lang):
63 | _tree_sitter_lang_impl_with_file(repository_ctx, lang, TREE_SITTER_BUILD_FILE_NO_C)
64 |
65 | TREE_SITTER_BUILD_FILE_TS = """cc_library(
66 | name = "tree_sitter_typescript",
67 | srcs = ["typescript/src/parser.c", "typescript/src/scanner.c", "common/scanner.h"],
68 | copts = ["-Iexternal/tree_sitter_{lang}/typescript/src"],
69 | hdrs = ["typescript/src/tree_sitter/parser.h"],
70 | linkstatic = True,
71 | visibility = ["//visibility:public"],
72 | )
73 |
74 | cc_library(
75 | name = "tree_sitter_tsx",
76 | srcs = ["tsx/src/parser.c", "tsx/src/scanner.c", "common/scanner.h"],
77 | copts = ["-Iexternal/tree_sitter_{lang}/tsx/src"],
78 | hdrs = ["tsx/src/tree_sitter/parser.h"],
79 | linkstatic = True,
80 | visibility = ["//visibility:public"],
81 | )
82 | """
83 |
84 | def _tree_sitter_lang_impl_ts(repository_ctx, lang):
85 | _tree_sitter_lang_impl_with_file(repository_ctx, lang, TREE_SITTER_BUILD_FILE_TS)
86 |
87 | def _tree_sitter_lang_impl_js(repository_ctx, lang):
88 | _tree_sitter_lang_impl_with_file(repository_ctx, lang, TREE_SITTER_BUILD_FILE_WITH_C)
89 |
90 | # python
91 | tree_sitter_python = repository_rule(
92 | implementation = lambda repository_ctx: _tree_sitter_lang_impl_with_cc(repository_ctx, lang = "python"),
93 | )
94 |
95 | # rust
96 | tree_sitter_rust = repository_rule(
97 | implementation = lambda repository_ctx: _tree_sitter_lang_impl_with_c(repository_ctx, lang = "rust"),
98 | )
99 |
100 | # go
101 | tree_sitter_go = repository_rule(
102 | implementation = lambda repository_ctx: _tree_sitter_lang_impl_no_c(repository_ctx, lang = "go"),
103 | )
104 |
105 | # typescript
106 | tree_sitter_typescript = repository_rule(
107 | implementation = lambda repository_ctx: _tree_sitter_lang_impl_ts(repository_ctx, lang = "typescript"),
108 | )
109 |
110 | # javascript
111 | tree_sitter_javascript = repository_rule(
112 | implementation = lambda repository_ctx: _tree_sitter_lang_impl_js(repository_ctx, lang = "javascript"),
113 | )
--------------------------------------------------------------------------------
/generate-website/README.md:
--------------------------------------------------------------------------------
1 | ## Generate Website
2 |
3 | An html website with embedded js and tailwind for styling.
4 |
5 | Goal:
6 | * Talks about optimizations in language models.
7 | * Talks about capabilities of new language models.
8 | * Explains the architecture of a transformer model as if done to a 10 year old child.
9 |
10 | Spec:
11 | * A top bar that handles switching between three tabs for each of the goals. Should be slightly dark. Should be on the top right.
12 | * A great title on the top left.
13 | * The background should be a really light blue.
14 | * Outline all the buttons, with a golden color.
15 | * Make the website really readable.
16 | * Each section should have atleast 2 sections with clear black titles.
17 |
18 |
19 | #### Screenshots
20 |
21 | The prompt:
22 |
23 | 
24 |
25 | The generated website (0-shot, first try):
26 |
27 | 
--------------------------------------------------------------------------------
/generate-website/rendered-website.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/generate-website/rendered-website.png
--------------------------------------------------------------------------------
/generate-website/website.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Language Model Optimizations & Capabilities
7 |
8 |
11 |
12 |
13 |
14 | Language Model Optimizations & Capabilities
15 |
16 |
17 | Optimizations
18 | Capabilities
19 | Transformer Architecture
20 |
21 |
22 |
23 |
24 |
25 | Optimizations in Language Models
26 |
27 | 1. Pruning
28 | Pruning is a technique used to remove less important connections in a neural network, reducing its size and complexity. This can lead to faster training and inference times, as well as lower memory requirements.
29 |
30 |
31 | 2. Quantization
32 | Quantization is the process of converting continuous values into discrete values, often to reduce the memory and computational requirements of a model. This can lead to faster training and inference times, as well as lower memory requirements.
33 |
34 |
35 |
36 | Capabilities of New Language Models
37 |
38 | 1. Text Generation
39 | New language models can generate coherent and contextually relevant text, making them useful for tasks such as content creation, summarization, and translation.
40 |
41 |
42 | 2. Question Answering
43 | Advanced language models can understand and answer questions based on a given context, making them valuable for applications like chatbots and customer support.
44 |
45 |
46 |
47 | Explaining Transformer Architecture to a 10-Year-Old
48 |
49 | 1. Transformers are like LEGO blocks
50 | Imagine you have a bunch of LEGO blocks. You can stack them together in different ways to create various shapes and structures. Transformers work similarly, using building blocks called "layers" to process and understand text.
51 |
52 |
53 | 2. Transformers are good listeners
54 | Transformers are great at paying attention to different parts of a sentence. They can figure out which words are important and how they relate to each other, helping them understand the meaning of the text.
55 |
56 |
57 |
58 |
68 |
69 |
--------------------------------------------------------------------------------
/generate-website/website.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/generate-website/website.png
--------------------------------------------------------------------------------
/jitifying-pytorch/.gitignore:
--------------------------------------------------------------------------------
1 | .ipynb_checkpoints
--------------------------------------------------------------------------------
/jitifying-pytorch/README.md:
--------------------------------------------------------------------------------
1 | ## Jit-ifying Pytorch
2 |
3 | Scenario: You've implemented a slow version of a function dealing with tensors. You want it to be jitted.
4 |
5 | #### Screenshots
6 |
7 | The full conversation:
8 |
9 | 
--------------------------------------------------------------------------------
/jitifying-pytorch/jit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/jitifying-pytorch/jit.png
--------------------------------------------------------------------------------
/jitifying-pytorch/shift.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 8,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import torch"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": 7,
15 | "metadata": {},
16 | "outputs": [],
17 | "source": [
18 | "def shift_tensor(xs: torch.Tensor, shifts: torch.Tensor):\n",
19 | " # xs is shape BxLxD\n",
20 | " # shift has shape B\n",
21 | " rval = []\n",
22 | " for x, i in zip(xs, shifts):\n",
23 | " x = torch.roll(x, shifts=i.item(), dims = 0)\n",
24 | " if i > 0:\n",
25 | " x[:i] = 0\n",
26 | " rval.append(x)\n",
27 | " return torch.stack(rval, dim=0)"
28 | ]
29 | },
30 | {
31 | "cell_type": "code",
32 | "execution_count": null,
33 | "metadata": {},
34 | "outputs": [],
35 | "source": [
36 | "torch.random.manual_seed(1)\n",
37 | "xs = torch.randn(2, 12, 3)\n",
38 | "shifts = torch.randint(-5, 12, (2,))\n",
39 | "fill_value = 0\n",
40 | "# Compute output using shift tensor\n",
41 | "shifted_tensor = shift_tensor(xs, shifts)\n",
42 | "# Compute output using shift_tensor_v2\n",
43 | "shifted_tensor_v2 = shift_tensor_v2(xs, shifts)\n",
44 | "\n",
45 | "# Check that the two outputs are equal\n",
46 | "assert torch.allclose(shifted_tensor, shifted_tensor_v2) \n",
47 | "\n",
48 | "# OMG THIS WORKS!"
49 | ]
50 | },
51 | {
52 | "cell_type": "code",
53 | "execution_count": null,
54 | "metadata": {},
55 | "outputs": [],
56 | "source": []
57 | }
58 | ],
59 | "metadata": {
60 | "kernelspec": {
61 | "display_name": "Python 3",
62 | "language": "python",
63 | "name": "python3"
64 | },
65 | "language_info": {
66 | "codemirror_mode": {
67 | "name": "ipython",
68 | "version": 3
69 | },
70 | "file_extension": ".py",
71 | "mimetype": "text/x-python",
72 | "name": "python",
73 | "nbconvert_exporter": "python",
74 | "pygments_lexer": "ipython3",
75 | "version": "3.9.12"
76 | },
77 | "orig_nbformat": 4
78 | },
79 | "nbformat": 4,
80 | "nbformat_minor": 2
81 | }
82 |
--------------------------------------------------------------------------------
/kube-tf/README.md:
--------------------------------------------------------------------------------
1 | ## Generate Terraform files from Kube YAMLs
2 |
3 | Scenario: You have Kube YAMLs. You want to use Terraform instead. Why should you write the code? Just let the model do it.
4 |
5 | #### Steps
6 |
7 | 1. Prompt GPT-4 with "Can you please translate this to use terraform for deployment" including the `deployment.yaml` file.
8 | 2. That's it. The generated `deployment.tf` file just works.
9 |
10 |
11 | #### Screenshots
12 |
13 | The generation:
14 |
15 | 
--------------------------------------------------------------------------------
/kube-tf/deployment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/kube-tf/deployment.png
--------------------------------------------------------------------------------
/kube-tf/deployment.tf:
--------------------------------------------------------------------------------
1 | provider "kubernetes" {
2 | config_path = "~/.kube/config"
3 | }
4 |
5 | resource "kubernetes_deployment" "mongodb" {
6 | metadata {
7 | name = "mongodb-deployment"
8 | labels = {
9 | app = "mongodb"
10 | }
11 | }
12 | spec {
13 | replicas = 1
14 | selector {
15 | match_labels = {
16 | app = "mongodb"
17 | }
18 | }
19 | template {
20 | metadata {
21 | labels = {
22 | app = "mongodb"
23 | }
24 | }
25 | spec {
26 | container {
27 | name = "mongodb"
28 | image = "mongo"
29 | port {
30 | container_port = 27017
31 | }
32 | env {
33 | name = "MONGO_INITDB_ROOT_USERNAME"
34 | value_from {
35 | secret_key_ref {
36 | name = "mongodb-secret"
37 | key = "mongo-root-username"
38 | }
39 | }
40 | }
41 | env {
42 | name = "MONGO_INITDB_ROOT_PASSWORD"
43 | value_from {
44 | secret_key_ref {
45 | name = "mongodb-secret"
46 | key = "mongo-root-password"
47 | }
48 | }
49 | }
50 | }
51 | }
52 | }
53 | }
54 | }
55 | resource "kubernetes_service" "mongodb" {
56 | metadata {
57 | name = "mongodb-service"
58 | }
59 | spec {
60 | selector = {
61 | app = "mongodb"
62 | }
63 | port {
64 | protocol = "TCP"
65 | port = 27017
66 | target_port = 27017
67 | }
68 | }
69 | }
70 |
71 | resource "kubernetes_ingress" "app" {
72 | metadata {
73 | name = "name"
74 | annotations = {
75 | "kubernetes.io/ingress.class" = "nginx"
76 | }
77 | }
78 |
79 | spec {
80 | rule {
81 | host = "app.com"
82 |
83 | http {
84 | path {
85 | backend {
86 | service_name = "my-service"
87 | service_port = 8080
88 | }
89 | }
90 | }
91 | }
92 | }
93 | }
94 |
95 | resource "kubernetes_config_map" "mongodb" {
96 | metadata {
97 | name = "mongodb-configmap"
98 | }
99 |
100 | data = {
101 | database_url = "mongodb-service"
102 | }
103 | }
104 |
105 | resource "kubernetes_deployment" "mongo_express" {
106 | metadata {
107 | name = "mongo-express"
108 | labels = {
109 | app = "mongo-express"
110 | }
111 | }
112 |
113 | spec {
114 | replicas = 1
115 |
116 | selector {
117 | match_labels = {
118 | app = "mongo-express"
119 | }
120 | }
121 |
122 | template {
123 | metadata {
124 | labels = {
125 | app = "mongo-express"
126 | }
127 | }
128 |
129 | spec {
130 | container {
131 | name = "mongo-express"
132 | image = "mongo-express"
133 |
134 | port {
135 | container_port = 8081
136 | }
137 |
138 | env {
139 | name = "ME_CONFIG_MONGODB_ADMINUSERNAME"
140 | value_from {
141 | secret_key_ref {
142 | name = "mongodb-secret"
143 | key = "mongo-root-username"
144 | }
145 | }
146 | }
147 |
148 | env {
149 | name = "ME_CONFIG_MONGODB_ADMINPASSWORD"
150 | value_from {
151 | secret_key_ref {
152 | name = "mongodb-secret"
153 | key = "mongo-root-password"
154 | }
155 | }
156 | }
157 |
158 | env {
159 | name = "ME_CONFIG_MONGODB_SERVER"
160 | value_from {
161 | config_map_key_ref {
162 | name = "mongodb-configmap"
163 | key = "database_url"
164 | }
165 | }
166 | }
167 | }
168 | }
169 | }
170 | }
171 | }
172 |
173 | resource "kubernetes_service" "mongo_express" {
174 | metadata {
175 | name = "mongo-express-service"
176 | }
177 |
178 | spec {
179 | selector = {
180 | app = "mongo-express"
181 | }
182 |
183 | type = "LoadBalancer"
184 |
185 | port {
186 | protocol = "TCP"
187 | port = 8081
188 | target_port = 8081
189 | node_port = 30000
190 | }
191 | }
192 | }
193 |
194 | resource "kubernetes_secret" "mongodb" {
195 | metadata {
196 | name = "mongodb-secret"
197 | }
198 |
199 | type = "Opaque"
200 |
201 | data = {
202 | mongo-root-username = "dXNlcm5hbWU="
203 | mongo-root-password = "cGFzc3dvcmQ="
204 | }
205 | }
--------------------------------------------------------------------------------
/kube-tf/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: mongodb-deployment
5 | labels:
6 | app: mongodb
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: mongodb
12 | template:
13 | metadata:
14 | labels:
15 | app: mongodb
16 | spec:
17 | containers:
18 | - name: mongodb
19 | image: mongo
20 | ports:
21 | - containerPort: 27017
22 | env:
23 | - name: MONGO_INITDB_ROOT_USERNAME
24 | valueFrom:
25 | secretKeyRef:
26 | name: mongodb-secret
27 | key: mongo-root-username
28 | - name: MONGO_INITDB_ROOT_PASSWORD
29 | valueFrom:
30 | secretKeyRef:
31 | name: mongodb-secret
32 | key: mongo-root-password
33 | ---
34 | apiVersion: v1
35 | kind: Service
36 | metadata:
37 | name: mongodb-service
38 | spec:
39 | selector:
40 | app: mongodb
41 | ports:
42 | - protocol: TCP
43 | port: 27017
44 | targetPort: 27017
45 |
46 | ---
47 | apiVersion: networking.k8s.io/v1
48 | kind: Ingress
49 | metadata:
50 | name: name
51 | annotations:
52 | kubernetes.io/ingress.class: "nginx"
53 | spec:
54 | rules:
55 | - host: app.com
56 | http:
57 | paths:
58 | - path: /
59 | backend:
60 | serviceName: my-service
61 | servicePort: 8080
62 |
63 | ---
64 | apiVersion: v1
65 | kind: ConfigMap
66 | metadata:
67 | name: mongodb-configmap
68 | data:
69 | database_url: mongodb-service
70 |
71 | ---
72 |
73 | apiVersion: apps/v1
74 | kind: Deployment
75 | metadata:
76 | name: mongo-express
77 | labels:
78 | app: mongo-express
79 | spec:
80 | replicas: 1
81 | selector:
82 | matchLabels:
83 | app: mongo-express
84 | template:
85 | metadata:
86 | labels:
87 | app: mongo-express
88 | spec:
89 | containers:
90 | - name: mongo-express
91 | image: mongo-express
92 | ports:
93 | - containerPort: 8081
94 | env:
95 | - name: ME_CONFIG_MONGODB_ADMINUSERNAME
96 | valueFrom:
97 | secretKeyRef:
98 | name: mongodb-secret
99 | key: mongo-root-username
100 | - name: ME_CONFIG_MONGODB_ADMINPASSWORD
101 | valueFrom:
102 | secretKeyRef:
103 | name: mongodb-secret
104 | key: mongo-root-password
105 | - name: ME_CONFIG_MONGODB_SERVER
106 | valueFrom:
107 | configMapKeyRef:
108 | name: mongodb-configmap
109 | key: database_url
110 | ---
111 | apiVersion: v1
112 | kind: Service
113 | metadata:
114 | name: mongo-express-service
115 | spec:
116 | selector:
117 | app: mongo-express
118 | type: LoadBalancer
119 | ports:
120 | - protocol: TCP
121 | port: 8081
122 | targetPort: 8081
123 | nodePort: 30000
124 |
125 | ---
126 | apiVersion: v1
127 | kind: Secret
128 | metadata:
129 | name: mongodb-secret
130 | type: Opaque
131 | data:
132 | mongo-root-username: dXNlcm5hbWU=
133 | mongo-root-password: cGFzc3dvcmQ=
134 |
--------------------------------------------------------------------------------
/kube-tf/prompt.txt:
--------------------------------------------------------------------------------
1 | User request: Can you please translate this to use terraform for deployment.
--------------------------------------------------------------------------------
/python-to-c++/README.md:
--------------------------------------------------------------------------------
1 | ## Python to C++ translation
2 |
3 | Scenario: Legacy python code in the `py` folder for processing CSV files, and we want to port it over to C++ in the `cc` folder. We have started writing the C++ class, and now want to port over the main function: `group_by_column_and_filter`. It turns out that GPT-4 can just do it for us.
4 |
5 | #### Steps
6 |
7 | 1. Prompt GPT-4 with the entire C++ file in `csvinteresting.cc` and the entire Python file in `csvinteresting.py`, and ask it to add the `group_by_column_and_filter` function to the C++ class.
8 | 2. Run `./cc/run_cc.sh` and `./cc/run_py.sh` to verify that the outputs are the same (in the `world-cup-2022` folder).
9 | 3. It just works. 60 new lines, different parts of the file, and very pythonic code translated to working C++ code in one try.
10 |
11 |
12 | #### Screenshots
13 |
14 | The full prompt:
15 |
16 | 
17 |
18 | Explaining parts:
19 |
20 | 
--------------------------------------------------------------------------------
/python-to-c++/cc/clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | rm -rf world-cup-2022/wc_forecasts_*
4 | rm c
--------------------------------------------------------------------------------
/python-to-c++/cc/csvinteresting-post-gpt-4.cc:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | class CSVReader {
11 | public:
12 | CSVReader(const std::string& file_path) : file_path(file_path) {
13 | process_csv();
14 | predefined_column_filters = {
15 | {"contains", std::bind(&CSVReader::contains_filter, this, std::placeholders::_1, std::placeholders::_2)},
16 | {"regex", std::bind(&CSVReader::regex_filter, this, std::placeholders::_1, std::placeholders::_2)},
17 | {"prefix-match", std::bind(&CSVReader::prefix_match_filter, this, std::placeholders::_1, std::placeholders::_2)},
18 | };
19 | }
20 |
21 | void process_csv() {
22 | std::ifstream csv_file(file_path);
23 | std::string line;
24 | if (std::getline(csv_file, line)) {
25 | column_headings = split(line, ',');
26 | }
27 | while (std::getline(csv_file, line)) {
28 | data.push_back(split(line, ','));
29 | }
30 | }
31 |
32 | std::map summary() {
33 | std::map summary;
34 | summary["file_path"] = file_path;
35 | summary["num_rows"] = std::to_string(data.size());
36 | summary["num_columns"] = std::to_string(column_headings.size());
37 | summary["column_headings"] = join(column_headings, ",");
38 | return summary;
39 | }
40 |
41 | void filter_by_columns(const std::vector& columns_to_filter) {
42 | std::vector column_indices;
43 | for (const auto& column : columns_to_filter) {
44 | auto it = std::find(column_headings.begin(), column_headings.end(), column);
45 | if (it == column_headings.end()) {
46 | throw std::invalid_argument("Column '" + column + "' not found in CSV file.");
47 | }
48 | column_indices.push_back(std::distance(column_headings.begin(), it));
49 | }
50 | column_headings = columns_to_filter;
51 | for (auto& row : data) {
52 | std::vector new_row;
53 | for (int index : column_indices) {
54 | new_row.push_back(row[index]);
55 | }
56 | row = new_row;
57 | }
58 | }
59 |
60 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
61 | /// @param search_term
62 | /// @param include_columns
63 | void contains_filter(const std::string& search_term, const std::vector& include_columns) {
64 | std::vector columns_to_filter;
65 | for (const auto& column_heading : column_headings) {
66 | if (column_heading.find(search_term) != std::string::npos) {
67 | columns_to_filter.push_back(column_heading);
68 | }
69 | }
70 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
71 | filter_by_columns(columns_to_filter);
72 | }
73 |
74 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
75 | /// @param prefix
76 | /// @param include_columns
77 | void prefix_match_filter(const std::string& prefix, const std::vector& include_columns) {
78 | std::vector columns_to_filter;
79 | for (const auto& column_heading : column_headings) {
80 | if (column_heading.rfind(prefix, 0) == 0) {
81 | columns_to_filter.push_back(column_heading);
82 | }
83 | }
84 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
85 | filter_by_columns(columns_to_filter);
86 | }
87 |
88 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
89 | /// @param pattern
90 | /// @param include_columns
91 | void regex_filter(const std::string& pattern, const std::vector& include_columns) {
92 | std::regex re(pattern);
93 | std::vector columns_to_filter;
94 | for (const auto& column_heading : column_headings) {
95 | if (std::regex_search(column_heading, re)) {
96 | columns_to_filter.push_back(column_heading);
97 | }
98 | }
99 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
100 | filter_by_columns(columns_to_filter);
101 | }
102 |
103 | std::vector get_column(const std::string& column_name) {
104 | std::vector column;
105 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
106 | if (it == column_headings.end()) {
107 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
108 | }
109 | int column_index = std::distance(column_headings.begin(), it);
110 | for (const auto& row : data) {
111 | column.push_back(row[column_index]);
112 | }
113 | return column;
114 | }
115 |
116 | std::vector> search_column(const std::string& column_name, const std::string& search_term) {
117 | std::vector> result;
118 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
119 | if (it == column_headings.end()) {
120 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
121 | }
122 | int column_index = std::distance(column_headings.begin(), it);
123 | for (const auto& row : data) {
124 | if (row[column_index].find(search_term) != std::string::npos) {
125 | result.push_back(row);
126 | }
127 | }
128 | return result;
129 | }
130 |
131 | std::vector> search_column_regex(const std::string& column_name, const std::string& pattern) {
132 | std::vector> result;
133 | std::regex re(pattern);
134 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
135 | if (it == column_headings.end()) {
136 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
137 | }
138 | int column_index = std::distance(column_headings.begin(), it);
139 | for (const auto& row : data) {
140 | if (std::regex_search(row[column_index], re)) {
141 | result.push_back(row);
142 | }
143 | }
144 | return result;
145 | }
146 |
147 | void replace_column_values_regex(const std::string& column_name, const std::string& pattern, const std::string& new_value) {
148 | std::regex re(pattern);
149 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
150 | if (it == column_headings.end()) {
151 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
152 | }
153 | int column_index = std::distance(column_headings.begin(), it);
154 | for (auto& row : data) {
155 | if (std::regex_search(row[column_index], re)) {
156 | row[column_index] = new_value;
157 | }
158 | }
159 | }
160 |
161 | void add_column(const std::string& column_name, const std::string& default_value = "") {
162 | column_headings.push_back(column_name);
163 | for (auto& row : data) {
164 | row.push_back(default_value);
165 | }
166 | }
167 |
168 | void delete_column(const std::string& column_name) {
169 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
170 | if (it == column_headings.end()) {
171 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
172 | }
173 | int column_index = std::distance(column_headings.begin(), it);
174 | column_headings.erase(it);
175 | for (auto& row : data) {
176 | row.erase(row.begin() + column_index);
177 | }
178 | }
179 |
180 | void rename_column(const std::string& old_name, const std::string& new_name) {
181 | auto it = std::find(column_headings.begin(), column_headings.end(), old_name);
182 | if (it == column_headings.end()) {
183 | throw std::invalid_argument("Column '" + old_name + "' not found in CSV file.");
184 | }
185 | *it = new_name;
186 | }
187 | std::vector> data;
188 | std::vector column_headings;
189 |
190 | void group_by_column_and_filter(const std::string& column_name, const std::pair& filter_tuple, std::function>&)> aggregation_function) {
191 | if (!filter_tuple.first.empty()) {
192 | auto filter_func = predefined_column_filters[filter_tuple.first];
193 | filter_func(filter_tuple.second, {column_name});
194 | }
195 |
196 | if (std::find(column_headings.begin(), column_headings.end(), column_name) == column_headings.end()) {
197 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
198 | }
199 |
200 | int column_index = std::distance(column_headings.begin(), std::find(column_headings.begin(), column_headings.end(), column_name));
201 | std::map>> groups;
202 | for (const auto& row : data) {
203 | std::string group_key = row[column_index];
204 | groups[group_key].push_back(row);
205 | }
206 |
207 | std::map aggregations;
208 | if (aggregation_function) {
209 | for (const auto& group : groups) {
210 | aggregations[group.first] = aggregation_function(group.second);
211 | }
212 | }
213 |
214 | for (const auto& group : groups) {
215 | std::string file_path = "world-cup-2022/wc_forecasts_" + group.first + ".csv";
216 | write_csv(file_path, column_headings, group.second);
217 | }
218 |
219 | std::string file_path = "world-cup-2022/wc_forecasts_aggregations.csv";
220 | std::vector aggregation_headings = {column_name, "Aggregation"};
221 | std::vector> aggregation_data;
222 | for (const auto& aggregation : aggregations) {
223 | aggregation_data.push_back({aggregation.first, std::to_string(aggregation.second)});
224 | }
225 | write_csv(file_path, aggregation_headings, aggregation_data);
226 | }
227 |
228 | private:
229 | void write_csv(const std::string& file_path, const std::vector& headings, const std::vector>& data) {
230 | std::ofstream csv_file(file_path);
231 | for (const auto& heading : headings) {
232 | csv_file << heading << (heading != headings.back() ? "," : "\n");
233 | }
234 | for (const auto& row : data) {
235 | for (const auto& cell : row) {
236 | csv_file << cell << (cell != row.back() ? "," : "\n");
237 | }
238 | }
239 | }
240 |
241 | std::map&)>> predefined_column_filters;
242 |
243 | std::string file_path;
244 |
245 | std::vector split(const std::string &str, char delimiter) {
246 | std::vector tokens;
247 | std::string token;
248 | for (char c : str) {
249 | if (c == delimiter) {
250 | tokens.push_back(token);
251 | token.clear();
252 | } else {
253 | token += c;
254 | }
255 | }
256 | // Add the last token if it's not empty
257 | if (!token.empty()) {
258 | tokens.push_back(token);
259 | }
260 | return tokens;
261 | }
262 |
263 | std::string join(const std::vector& tokens, std::string delimiter) {
264 | std::string str;
265 | for (size_t i = 0; i < tokens.size(); ++i) {
266 | str += tokens[i];
267 | if (i != tokens.size() - 1) {
268 | str += delimiter;
269 | }
270 | }
271 | return str;
272 | }
273 | };
274 |
275 |
276 | int main() {
277 | // read the data at world-cup-2022/wc_forecasts.csv
278 | CSVReader csv_reader("world-cup-2022/wc_forecasts.csv");
279 |
280 | // print the column headings
281 | for (const auto& column_heading : csv_reader.column_headings) {
282 | std::cout << column_heading << ' ';
283 | }
284 | std::cout << std::endl;
285 |
286 | // group by column and filter
287 | csv_reader.group_by_column_and_filter("group", {"regex", "(sim)|(team)"}, [](const std::vector>& group_data) {
288 | return static_cast(group_data.size());
289 | });
290 |
291 | return 0;
292 | }
--------------------------------------------------------------------------------
/python-to-c++/cc/csvinteresting.cc:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | class CSVReader {
11 | public:
12 | CSVReader(const std::string& file_path) : file_path(file_path) {
13 | process_csv();
14 | }
15 |
16 | void process_csv() {
17 | std::ifstream csv_file(file_path);
18 | std::string line;
19 | if (std::getline(csv_file, line)) {
20 | column_headings = split(line, ',');
21 | }
22 | while (std::getline(csv_file, line)) {
23 | data.push_back(split(line, ','));
24 | }
25 | }
26 |
27 | std::map summary() {
28 | std::map summary;
29 | summary["file_path"] = file_path;
30 | summary["num_rows"] = std::to_string(data.size());
31 | summary["num_columns"] = std::to_string(column_headings.size());
32 | summary["column_headings"] = join(column_headings, ",");
33 | return summary;
34 | }
35 |
36 | void filter_by_columns(const std::vector& columns_to_filter) {
37 | std::vector column_indices;
38 | for (const auto& column : columns_to_filter) {
39 | auto it = std::find(column_headings.begin(), column_headings.end(), column);
40 | if (it == column_headings.end()) {
41 | throw std::invalid_argument("Column '" + column + "' not found in CSV file.");
42 | }
43 | column_indices.push_back(std::distance(column_headings.begin(), it));
44 | }
45 | column_headings = columns_to_filter;
46 | for (auto& row : data) {
47 | std::vector new_row;
48 | for (int index : column_indices) {
49 | new_row.push_back(row[index]);
50 | }
51 | row = new_row;
52 | }
53 | }
54 |
55 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
56 | /// @param search_term
57 | /// @param include_columns
58 | void contains_filter(const std::string& search_term, const std::vector& include_columns) {
59 | std::vector columns_to_filter;
60 | for (const auto& column_heading : column_headings) {
61 | if (column_heading.find(search_term) != std::string::npos) {
62 | columns_to_filter.push_back(column_heading);
63 | }
64 | }
65 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
66 | filter_by_columns(columns_to_filter);
67 | }
68 |
69 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
70 | /// @param prefix
71 | /// @param include_columns
72 | void prefix_match_filter(const std::string& prefix, const std::vector& include_columns) {
73 | std::vector columns_to_filter;
74 | for (const auto& column_heading : column_headings) {
75 | if (column_heading.rfind(prefix, 0) == 0) {
76 | columns_to_filter.push_back(column_heading);
77 | }
78 | }
79 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
80 | filter_by_columns(columns_to_filter);
81 | }
82 |
83 | /// @brief filters by the column. this mutates the column headings and data. so be careful. this might lead to search bugs.
84 | /// @param pattern
85 | /// @param include_columns
86 | void regex_filter(const std::string& pattern, const std::vector& include_columns) {
87 | std::regex re(pattern);
88 | std::vector columns_to_filter;
89 | for (const auto& column_heading : column_headings) {
90 | if (std::regex_search(column_heading, re)) {
91 | columns_to_filter.push_back(column_heading);
92 | }
93 | }
94 | columns_to_filter.insert(columns_to_filter.end(), include_columns.begin(), include_columns.end());
95 | filter_by_columns(columns_to_filter);
96 | }
97 |
98 | std::vector get_column(const std::string& column_name) {
99 | std::vector column;
100 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
101 | if (it == column_headings.end()) {
102 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
103 | }
104 | int column_index = std::distance(column_headings.begin(), it);
105 | for (const auto& row : data) {
106 | column.push_back(row[column_index]);
107 | }
108 | return column;
109 | }
110 |
111 | std::vector> search_column(const std::string& column_name, const std::string& search_term) {
112 | std::vector> result;
113 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
114 | if (it == column_headings.end()) {
115 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
116 | }
117 | int column_index = std::distance(column_headings.begin(), it);
118 | for (const auto& row : data) {
119 | if (row[column_index].find(search_term) != std::string::npos) {
120 | result.push_back(row);
121 | }
122 | }
123 | return result;
124 | }
125 |
126 | std::vector> search_column_regex(const std::string& column_name, const std::string& pattern) {
127 | std::vector> result;
128 | std::regex re(pattern);
129 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
130 | if (it == column_headings.end()) {
131 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
132 | }
133 | int column_index = std::distance(column_headings.begin(), it);
134 | for (const auto& row : data) {
135 | if (std::regex_search(row[column_index], re)) {
136 | result.push_back(row);
137 | }
138 | }
139 | return result;
140 | }
141 |
142 | void replace_column_values_regex(const std::string& column_name, const std::string& pattern, const std::string& new_value) {
143 | std::regex re(pattern);
144 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
145 | if (it == column_headings.end()) {
146 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
147 | }
148 | int column_index = std::distance(column_headings.begin(), it);
149 | for (auto& row : data) {
150 | if (std::regex_search(row[column_index], re)) {
151 | row[column_index] = new_value;
152 | }
153 | }
154 | }
155 |
156 | void add_column(const std::string& column_name, const std::string& default_value = "") {
157 | column_headings.push_back(column_name);
158 | for (auto& row : data) {
159 | row.push_back(default_value);
160 | }
161 | }
162 |
163 | void delete_column(const std::string& column_name) {
164 | auto it = std::find(column_headings.begin(), column_headings.end(), column_name);
165 | if (it == column_headings.end()) {
166 | throw std::invalid_argument("Column '" + column_name + "' not found in CSV file.");
167 | }
168 | int column_index = std::distance(column_headings.begin(), it);
169 | column_headings.erase(it);
170 | for (auto& row : data) {
171 | row.erase(row.begin() + column_index);
172 | }
173 | }
174 |
175 | void rename_column(const std::string& old_name, const std::string& new_name) {
176 | auto it = std::find(column_headings.begin(), column_headings.end(), old_name);
177 | if (it == column_headings.end()) {
178 | throw std::invalid_argument("Column '" + old_name + "' not found in CSV file.");
179 | }
180 | *it = new_name;
181 | }
182 | std::vector> data;
183 | std::vector column_headings;
184 |
185 | private:
186 | std::string file_path;
187 |
188 | std::vector split(const std::string &str, char delimiter) {
189 | std::vector tokens;
190 | std::string token;
191 | for (char c : str) {
192 | if (c == delimiter) {
193 | tokens.push_back(token);
194 | token.clear();
195 | } else {
196 | token += c;
197 | }
198 | }
199 | // Add the last token if it's not empty
200 | if (!token.empty()) {
201 | tokens.push_back(token);
202 | }
203 | return tokens;
204 | }
205 |
206 | std::string join(const std::vector& tokens, std::string delimiter) {
207 | std::string str;
208 | for (size_t i = 0; i < tokens.size(); ++i) {
209 | str += tokens[i];
210 | if (i != tokens.size() - 1) {
211 | str += delimiter;
212 | }
213 | }
214 | return str;
215 | }
216 | };
217 |
218 |
219 | int main() {
220 | // read the data at world-cup-2022/wc_forecasts.csv
221 | CSVReader csv_reader("world-cup-2022/wc_forecasts.csv");
222 |
223 | // print the column headings
224 | for (const auto& column_heading : csv_reader.column_headings) {
225 | std::cout << column_heading << ' ';
226 | }
227 | std::cout << std::endl;
228 |
229 | return 0;
230 | }
--------------------------------------------------------------------------------
/python-to-c++/cc/run_cc.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | clang++ csvinteresting.cc -o c -std=c++17
4 | ./c
--------------------------------------------------------------------------------
/python-to-c++/cc/world-cup-2022/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | files:
3 | - https://projects.fivethirtyeight.com/soccer-api/international/2022/wc_matches.csv
4 | - https://projects.fivethirtyeight.com/soccer-api/international/2022/wc_forecasts.csv
5 | ---
6 | # World Cup 2022
7 |
8 | This file contains links to the data behind our [2022 World Cup Predictions](https://projects.fivethirtyeight.com/2022-world-cup-predictions/).
9 |
10 | `wc_matches.csv` contains match-by-match projections.
11 |
12 | `wc_forecasts.csv` contains our tournament forecasts.
13 |
--------------------------------------------------------------------------------
/python-to-c++/cc/world-cup-2022/wc_forecasts.csv:
--------------------------------------------------------------------------------
1 | forecast_timestamp,team,group,spi,global_o,global_d,sim_wins,sim_ties,sim_losses,sim_goal_diff,goals_scored,goals_against,group_1,group_2,group_3,group_4,make_round_of_16,make_quarters,make_semis,make_final,win_league,timestamp
2 | 2022-12-18 17:56:03 UTC,Argentina,C,89.6486,2.8361,0.39397,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,2022-12-18 17:56:44 UTC
3 | 2022-12-18 17:56:03 UTC,France,D,88.30043,2.96765,0.54381,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,2022-12-18 17:56:44 UTC
4 | 2022-12-18 17:56:03 UTC,Morocco,F,73.16416,1.74313,0.53433,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
5 | 2022-12-18 17:56:03 UTC,Croatia,F,78.82038,2.20264,0.6029,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
6 | 2022-12-18 17:56:03 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
7 | 2022-12-18 17:56:03 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
8 | 2022-12-18 17:56:03 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
9 | 2022-12-18 17:56:03 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
10 | 2022-12-18 17:56:03 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
11 | 2022-12-18 17:56:03 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
12 | 2022-12-18 17:56:03 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
13 | 2022-12-18 17:56:03 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
14 | 2022-12-18 17:56:03 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
15 | 2022-12-18 17:56:03 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
16 | 2022-12-18 17:56:03 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
17 | 2022-12-18 17:56:03 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
18 | 2022-12-18 17:56:03 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
19 | 2022-12-18 17:56:03 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
20 | 2022-12-18 17:56:03 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
21 | 2022-12-18 17:56:03 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
22 | 2022-12-18 17:56:03 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
23 | 2022-12-18 17:56:03 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
24 | 2022-12-18 17:56:03 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
25 | 2022-12-18 17:56:03 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
26 | 2022-12-18 17:56:03 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
27 | 2022-12-18 17:56:03 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
28 | 2022-12-18 17:56:03 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
29 | 2022-12-18 17:56:03 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
30 | 2022-12-18 17:56:03 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
31 | 2022-12-18 17:56:03 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
32 | 2022-12-18 17:56:03 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
33 | 2022-12-18 17:56:03 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
34 | 2022-12-17 16:54:45 UTC,Argentina,C,88.85631,2.69895,0.37464,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.53027,2022-12-18 17:56:44 UTC
35 | 2022-12-17 16:54:45 UTC,France,D,88.41321,2.89548,0.49957,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.46973,2022-12-18 17:56:44 UTC
36 | 2022-12-17 16:54:45 UTC,Morocco,F,73.16416,1.74313,0.53433,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
37 | 2022-12-17 16:54:45 UTC,Croatia,F,78.82038,2.20264,0.6029,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
38 | 2022-12-17 16:54:45 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
39 | 2022-12-17 16:54:45 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
40 | 2022-12-17 16:54:45 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
41 | 2022-12-17 16:54:45 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
42 | 2022-12-17 16:54:45 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
43 | 2022-12-17 16:54:45 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
44 | 2022-12-17 16:54:45 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
45 | 2022-12-17 16:54:45 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
46 | 2022-12-17 16:54:45 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
47 | 2022-12-17 16:54:45 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
48 | 2022-12-17 16:54:45 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
49 | 2022-12-17 16:54:45 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
50 | 2022-12-17 16:54:45 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
51 | 2022-12-17 16:54:45 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
52 | 2022-12-17 16:54:45 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
53 | 2022-12-17 16:54:45 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
54 | 2022-12-17 16:54:45 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
55 | 2022-12-17 16:54:45 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
56 | 2022-12-17 16:54:45 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
57 | 2022-12-17 16:54:45 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
58 | 2022-12-17 16:54:45 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
59 | 2022-12-17 16:54:45 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
60 | 2022-12-17 16:54:45 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
61 | 2022-12-17 16:54:45 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
62 | 2022-12-17 16:54:45 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
63 | 2022-12-17 16:54:45 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
64 | 2022-12-17 16:54:45 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
65 | 2022-12-17 16:54:45 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
66 | 2022-12-10 21:01:29 UTC,Argentina,C,87.45777,2.58007,0.39356,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.64042,0.36568,2022-12-18 17:56:44 UTC
67 | 2022-12-10 21:01:29 UTC,France,D,87.71519,2.86212,0.52477,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.66212,0.34861,2022-12-18 17:56:44 UTC
68 | 2022-12-10 21:01:29 UTC,Croatia,F,79.3709,2.17124,0.55799,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.35958,0.15876,2022-12-18 17:56:44 UTC
69 | 2022-12-10 21:01:29 UTC,Morocco,F,75.13455,1.79236,0.49031,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.33788,0.12695,2022-12-18 17:56:44 UTC
70 | 2022-12-10 21:01:29 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
71 | 2022-12-10 21:01:29 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
72 | 2022-12-10 21:01:29 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
73 | 2022-12-10 21:01:29 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
74 | 2022-12-10 21:01:29 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
75 | 2022-12-10 21:01:29 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
76 | 2022-12-10 21:01:29 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
77 | 2022-12-10 21:01:29 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
78 | 2022-12-10 21:01:29 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
79 | 2022-12-10 21:01:29 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
80 | 2022-12-10 21:01:29 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
81 | 2022-12-10 21:01:29 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
82 | 2022-12-10 21:01:29 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
83 | 2022-12-10 21:01:29 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
84 | 2022-12-10 21:01:29 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
85 | 2022-12-10 21:01:29 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
86 | 2022-12-10 21:01:29 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
87 | 2022-12-10 21:01:29 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
88 | 2022-12-10 21:01:29 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
89 | 2022-12-10 21:01:29 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
90 | 2022-12-10 21:01:29 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
91 | 2022-12-10 21:01:29 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
92 | 2022-12-10 21:01:29 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
93 | 2022-12-10 21:01:29 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
94 | 2022-12-10 21:01:29 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
95 | 2022-12-10 21:01:29 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
96 | 2022-12-10 21:01:29 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
97 | 2022-12-10 21:01:29 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
98 | 2022-12-06 20:54:12 UTC,Brazil,G,93.46631,3.17048,0.28151,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.77131,0.5071,0.32911,2022-12-18 17:56:44 UTC
99 | 2022-12-06 20:54:12 UTC,Portugal,H,87.92472,2.89158,0.52748,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.68251,0.32756,0.14112,2022-12-18 17:56:44 UTC
100 | 2022-12-06 20:54:12 UTC,England,B,87.58969,2.65733,0.42584,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.51539,0.29599,0.13556,2022-12-18 17:56:44 UTC
101 | 2022-12-06 20:54:12 UTC,Argentina,C,87.32471,2.5762,0.3988,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.57583,0.24429,0.13042,2022-12-18 17:56:44 UTC
102 | 2022-12-06 20:54:12 UTC,France,D,87.5287,2.80437,0.50561,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,0.48461,0.27046,0.11868,2022-12-18 17:56:44 UTC
103 | 2022-12-06 20:54:12 UTC,Netherlands,A,84.18963,2.54424,0.54804,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.42417,0.15471,0.07378,2022-12-18 17:56:44 UTC
104 | 2022-12-06 20:54:12 UTC,Croatia,F,78.99496,2.16748,0.5726,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,0.22869,0.0939,0.03901,2022-12-18 17:56:44 UTC
105 | 2022-12-06 20:54:12 UTC,Morocco,F,74.44986,1.80298,0.5249,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.31749,0.10599,0.03232,2022-12-18 17:56:44 UTC
106 | 2022-12-06 20:54:12 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
107 | 2022-12-06 20:54:12 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
108 | 2022-12-06 20:54:12 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
109 | 2022-12-06 20:54:12 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
110 | 2022-12-06 20:54:12 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
111 | 2022-12-06 20:54:12 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
112 | 2022-12-06 20:54:12 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
113 | 2022-12-06 20:54:12 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
114 | 2022-12-06 20:54:12 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
115 | 2022-12-06 20:54:12 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
116 | 2022-12-06 20:54:12 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
117 | 2022-12-06 20:54:12 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
118 | 2022-12-06 20:54:12 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
119 | 2022-12-06 20:54:12 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
120 | 2022-12-06 20:54:12 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
121 | 2022-12-06 20:54:12 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
122 | 2022-12-06 20:54:12 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
123 | 2022-12-06 20:54:12 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
124 | 2022-12-06 20:54:12 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
125 | 2022-12-06 20:54:12 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
126 | 2022-12-06 20:54:12 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
127 | 2022-12-06 20:54:12 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
128 | 2022-12-06 20:54:12 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
129 | 2022-12-06 20:54:12 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
130 | 2022-12-02 21:01:10 UTC,Brazil,G,92.89519,3.02538,0.26423,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,0.82453,0.63086,0.42125,0.26399,2022-12-18 17:56:44 UTC
131 | 2022-12-02 21:01:10 UTC,Spain,E,89.20054,2.72756,0.36851,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.73102,0.45168,0.25872,0.13534,2022-12-18 17:56:44 UTC
132 | 2022-12-02 21:01:10 UTC,Argentina,C,87.98006,2.61284,0.38151,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,0.82673,0.5156,0.24966,0.13119,2022-12-18 17:56:44 UTC
133 | 2022-12-02 21:01:10 UTC,France,D,88.57378,2.8376,0.46033,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,0.81511,0.46123,0.24482,0.12131,2022-12-18 17:56:44 UTC
134 | 2022-12-02 21:01:10 UTC,England,B,86.96946,2.62701,0.44455,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,0.68391,0.36842,0.19286,0.09399,2022-12-18 17:56:44 UTC
135 | 2022-12-02 21:01:10 UTC,Portugal,H,85.79833,2.68262,0.53904,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,0.61312,0.29093,0.14492,0.06613,2022-12-18 17:56:44 UTC
136 | 2022-12-02 21:01:10 UTC,Netherlands,A,83.97368,2.48412,0.52493,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,0.65454,0.31099,0.13043,0.06064,2022-12-18 17:56:44 UTC
137 | 2022-12-02 21:01:10 UTC,Croatia,F,79.13888,2.20274,0.58842,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,0.53989,0.16169,0.07053,0.02849,2022-12-18 17:56:44 UTC
138 | 2022-12-02 21:01:10 UTC,Switzerland,G,78.51106,2.21569,0.62543,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.38688,0.14682,0.05877,0.02126,2022-12-18 17:56:44 UTC
139 | 2022-12-02 21:01:10 UTC,Japan,E,76.1371,2.07616,0.63997,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.46011,0.12806,0.05155,0.01932,2022-12-18 17:56:44 UTC
140 | 2022-12-02 21:01:10 UTC,Senegal,A,75.46857,2.00641,0.62177,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.31609,0.1201,0.04418,0.01542,2022-12-18 17:56:44 UTC
141 | 2022-12-02 21:01:10 UTC,Morocco,F,74.42499,1.86603,0.56935,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,0.26898,0.11057,0.04279,0.01426,2022-12-18 17:56:44 UTC
142 | 2022-12-02 21:01:10 UTC,USA,B,73.06818,1.89806,0.6479,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.34546,0.11972,0.03617,0.01238,2022-12-18 17:56:44 UTC
143 | 2022-12-02 21:01:10 UTC,South Korea,H,72.73674,1.90456,0.66638,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.17547,0.07939,0.02912,0.01011,2022-12-18 17:56:44 UTC
144 | 2022-12-02 21:01:10 UTC,Poland,C,65.76676,1.74318,0.83295,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.18489,0.05025,0.01294,0.00331,2022-12-18 17:56:44 UTC
145 | 2022-12-02 21:01:10 UTC,Australia,D,63.05051,1.58682,0.8147,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.17327,0.05369,0.01129,0.00286,2022-12-18 17:56:44 UTC
146 | 2022-12-02 21:01:10 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
147 | 2022-12-02 21:01:10 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
148 | 2022-12-02 21:01:10 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
149 | 2022-12-02 21:01:10 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
150 | 2022-12-02 21:01:10 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
151 | 2022-12-02 21:01:10 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
152 | 2022-12-02 21:01:10 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
153 | 2022-12-02 21:01:10 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
154 | 2022-12-02 21:01:10 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
155 | 2022-12-02 21:01:10 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
156 | 2022-12-02 21:01:10 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
157 | 2022-12-02 21:01:10 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
158 | 2022-12-02 21:01:10 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
159 | 2022-12-02 21:01:10 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
160 | 2022-12-02 21:01:10 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
161 | 2022-12-02 21:01:10 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
162 | 2022-11-28 20:59:50 UTC,Brazil,G,93.48139,3.0621,0.23656,2.81289,0.15059,0.03652,4.94744,5.26053,0.31309,0.99515,0.00485,0.0,0.0,1.0,0.82256,0.53731,0.39419,0.26002,2022-12-18 17:56:44 UTC
163 | 2022-11-28 20:59:50 UTC,Spain,E,90.62031,2.84092,0.33577,1.61371,1.24833,0.13796,8.04799,9.76438,1.71639,0.84893,0.14284,0.00823,0.0,0.99177,0.72213,0.35169,0.23196,0.13658,2022-12-18 17:56:44 UTC
164 | 2022-11-28 20:59:50 UTC,France,D,90.1491,3.03006,0.45553,2.6489,0.23851,0.11259,5.1854,7.78972,2.60432,0.99992,8.0e-05,0.0,0.0,1.0,0.75998,0.47603,0.27224,0.13269,2022-12-18 17:56:44 UTC
165 | 2022-11-28 20:59:50 UTC,Portugal,H,87.55187,2.81564,0.51015,2.58556,0.24741,0.16703,3.94343,6.80943,2.866,0.98834,0.01166,0.0,0.0,1.0,0.65092,0.35302,0.18387,0.08195,2022-12-18 17:56:44 UTC
166 | 2022-11-28 20:59:50 UTC,Argentina,C,86.02625,2.48839,0.42171,1.57821,0.26472,1.15707,1.89454,4.61122,2.71668,0.5729,0.20115,0.22498,0.00097,0.77405,0.49381,0.29805,0.12681,0.06528,2022-12-18 17:56:44 UTC
167 | 2022-11-28 20:59:50 UTC,England,B,85.40758,2.54769,0.48612,1.60056,1.25646,0.14298,4.9891,7.69141,2.70231,0.82096,0.1782,0.00084,0.0,0.99916,0.5983,0.29438,0.14332,0.06282,2022-12-18 17:56:44 UTC
168 | 2022-11-28 20:59:50 UTC,Germany,E,88.86004,3.15327,0.60378,0.80585,1.1424,1.05175,1.01357,4.51484,3.50127,0.0,0.67345,0.1324,0.19415,0.67345,0.42428,0.24106,0.12928,0.05919,2022-12-18 17:56:44 UTC
169 | 2022-11-28 20:59:50 UTC,Netherlands,A,84.3837,2.59307,0.56564,1.77578,1.15339,0.07083,3.89088,5.55187,1.66099,0.75673,0.23478,0.00849,0.0,0.99151,0.59733,0.32199,0.12204,0.05723,2022-12-18 17:56:44 UTC
170 | 2022-11-28 20:59:50 UTC,Croatia,F,80.87388,2.30506,0.57143,1.38931,1.28598,0.32471,3.13406,5.36639,2.23233,0.54603,0.21259,0.24138,0.0,0.75862,0.31783,0.13829,0.06419,0.0254,2022-12-18 17:56:44 UTC
171 | 2022-11-28 20:59:50 UTC,Ecuador,A,75.81562,1.93859,0.56118,1.36865,1.33448,0.29687,2.13904,4.04594,1.9069,0.17704,0.5322,0.29076,0.0,0.70924,0.3161,0.12525,0.04497,0.01607,2022-12-18 17:56:44 UTC
172 | 2022-11-28 20:59:50 UTC,Denmark,D,77.67855,2.14044,0.61433,0.5222,1.27795,1.19985,-0.31798,2.53289,2.85087,0.0,0.51286,0.35534,0.1318,0.51286,0.2412,0.11817,0.03423,0.01409,2022-12-18 17:56:44 UTC
173 | 2022-11-28 20:59:50 UTC,Switzerland,G,77.00154,2.0892,0.61069,1.39764,0.291,1.31136,0.18218,2.34865,2.16647,0.00485,0.67384,0.30992,0.01139,0.67869,0.24187,0.09924,0.03875,0.01281,2022-12-18 17:56:44 UTC
174 | 2022-11-28 20:59:50 UTC,Morocco,F,74.98677,1.90939,0.57595,1.39518,1.31463,0.29019,2.20617,3.19518,0.98901,0.25817,0.65551,0.08632,0.0,0.91368,0.2796,0.08569,0.03619,0.01278,2022-12-18 17:56:44 UTC
175 | 2022-11-28 20:59:50 UTC,Uruguay,H,79.28334,2.08567,0.50822,0.56285,1.27989,1.15726,-1.15685,1.53457,2.69142,0.0,0.48823,0.25995,0.25182,0.48823,0.12173,0.05184,0.02802,0.01254,2022-12-18 17:56:44 UTC
176 | 2022-11-28 20:59:50 UTC,Belgium,F,79.43852,2.39434,0.69623,1.32471,0.28598,1.38931,-1.13406,2.23233,3.36639,0.1958,0.1319,0.60422,0.06808,0.3277,0.12889,0.05167,0.02323,0.00953,2022-12-18 17:56:44 UTC
177 | 2022-11-28 20:59:50 UTC,Poland,C,68.95006,1.84231,0.77859,1.15707,1.26472,0.57821,1.10546,2.71668,1.61122,0.36082,0.39437,0.24481,0.0,0.75519,0.24598,0.08961,0.02053,0.00643,2022-12-18 17:56:44 UTC
178 | 2022-11-28 20:59:50 UTC,Iran,B,69.25599,1.78397,0.72133,1.30798,0.3153,1.37672,-2.13273,5.03097,7.1637,0.12374,0.45502,0.3669,0.05434,0.57876,0.20294,0.07616,0.01877,0.00602,2022-12-18 17:56:44 UTC
179 | 2022-11-28 20:59:50 UTC,USA,B,72.55486,1.91623,0.68239,0.37672,2.3153,0.30798,0.13273,2.1637,2.03097,0.05495,0.32177,0.51549,0.10779,0.37672,0.14541,0.06135,0.01639,0.00562,2022-12-18 17:56:44 UTC
180 | 2022-11-28 20:59:50 UTC,Senegal,A,73.00354,1.88325,0.64005,1.29687,0.33448,1.36865,-0.13904,3.9069,4.04594,0.06623,0.23302,0.69809,0.00266,0.29925,0.12513,0.04647,0.0165,0.00545,2022-12-18 17:56:44 UTC
181 | 2022-11-28 20:59:50 UTC,Japan,E,73.67885,1.98526,0.68384,1.13796,0.24833,1.61371,-1.04799,2.71639,3.76438,0.13796,0.05747,0.80451,6.0e-05,0.19543,0.09698,0.02898,0.01258,0.00487,2022-12-18 17:56:44 UTC
182 | 2022-11-28 20:59:50 UTC,Serbia,G,74.7218,2.19758,0.78677,0.31136,1.291,1.39764,-2.18218,4.16647,6.34865,0.0,0.30418,0.37027,0.32555,0.30418,0.10171,0.03952,0.01503,0.00462,2022-12-18 17:56:44 UTC
183 | 2022-11-28 20:59:50 UTC,Mexico,C,72.44435,1.79005,0.59636,0.46291,1.30803,1.22906,-1.53731,1.31152,2.84883,0.0,0.164,0.29891,0.53709,0.164,0.04521,0.01911,0.00693,0.00223,2022-12-18 17:56:44 UTC
184 | 2022-11-28 20:59:50 UTC,Australia,D,62.44587,1.61996,0.86734,1.19985,0.27795,1.5222,-2.68202,2.85087,5.53289,8.0e-05,0.44607,0.4949,0.05895,0.44615,0.13214,0.0406,0.00626,0.00177,2022-12-18 17:56:44 UTC
185 | 2022-11-28 20:59:50 UTC,Saudi Arabia,C,62.01155,1.65981,0.91933,1.22906,0.30803,1.46291,-1.46269,2.84883,4.31152,0.06628,0.24048,0.2313,0.46194,0.30676,0.06571,0.02028,0.00412,0.0011,2022-12-18 17:56:44 UTC
186 | 2022-11-28 20:59:50 UTC,South Korea,H,70.34955,1.84149,0.71967,0.16703,1.24741,1.58556,-1.94343,2.866,4.80943,0.0,0.08912,0.25671,0.65417,0.08912,0.01607,0.00556,0.00247,0.00101,2022-12-18 17:56:44 UTC
187 | 2022-11-28 20:59:50 UTC,Ghana,H,60.50179,1.59883,0.92909,1.15726,0.27989,1.56285,-0.84315,5.69142,6.53457,0.01166,0.41099,0.48334,0.09401,0.42265,0.04063,0.0092,0.00281,0.00065,2022-12-18 17:56:44 UTC
188 | 2022-11-28 20:59:50 UTC,Tunisia,D,65.92204,1.54964,0.67071,0.11259,1.23851,1.6489,-2.1854,0.60432,2.78972,0.0,0.04099,0.14976,0.80925,0.04099,0.01597,0.00665,0.00158,0.0005,2022-12-18 17:56:44 UTC
189 | 2022-11-28 20:59:50 UTC,Wales,B,65.1679,1.6696,0.79776,0.14298,1.25646,1.60056,-2.9891,1.70231,4.69141,0.00035,0.04501,0.11677,0.83787,0.04536,0.01479,0.0059,0.00128,0.0004,2022-12-18 17:56:44 UTC
190 | 2022-11-28 20:59:50 UTC,Costa Rica,E,52.89792,1.27862,0.94276,1.05175,0.1424,1.80585,-8.01357,1.50127,9.51484,0.01311,0.12624,0.05486,0.80579,0.13935,0.03029,0.00548,0.00108,0.0002,2022-12-18 17:56:44 UTC
191 | 2022-11-28 20:59:50 UTC,Cameroon,G,64.47548,1.69585,0.84762,0.03652,1.15059,1.81289,-2.94744,3.31309,6.26053,0.0,0.01713,0.31981,0.66306,0.01713,0.00451,0.00145,0.00038,0.00015,2022-12-18 17:56:44 UTC
192 | 2022-11-28 20:59:50 UTC,Canada,F,71.52045,1.97761,0.7711,0.29019,0.31463,2.39518,-4.20617,1.98901,6.19518,0.0,0.0,0.06808,0.93192,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
193 | 2022-11-28 20:59:50 UTC,Qatar,A,48.45657,1.43718,1.29612,0.07083,0.15339,2.77578,-5.89088,1.66099,7.55187,0.0,0.0,0.00266,0.99734,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
194 | 2022-11-24 20:56:17 UTC,Brazil,G,93.65727,3.15479,0.26042,2.4447,0.39723,0.15807,5.06266,6.02952,0.96686,0.85231,0.13118,0.01552,0.00099,0.98349,0.76231,0.50478,0.36793,0.2476,2022-12-18 17:56:44 UTC
195 | 2022-11-24 20:56:17 UTC,Spain,E,91.2188,2.95544,0.34936,2.08913,0.49144,0.41943,8.54154,10.60562,2.06408,0.7482,0.1539,0.09711,0.00079,0.9021,0.6638,0.35123,0.23944,0.14587,2022-12-18 17:56:44 UTC
196 | 2022-11-24 20:56:17 UTC,France,D,89.25241,2.94006,0.46965,2.13886,0.51836,0.34278,4.74748,7.34515,2.59767,0.76912,0.16078,0.06439,0.00571,0.9299,0.65888,0.40349,0.22312,0.11092,2022-12-18 17:56:44 UTC
197 | 2022-11-24 20:56:17 UTC,Netherlands,A,86.07414,2.75552,0.56358,2.21615,0.45423,0.32962,4.22665,6.03928,1.81263,0.71232,0.23706,0.04561,0.00501,0.94938,0.60133,0.35679,0.14615,0.07245,2022-12-18 17:56:44 UTC
198 | 2022-11-24 20:56:17 UTC,Portugal,H,87.30309,2.80698,0.52026,2.00726,0.55613,0.43661,2.23243,6.03842,3.80599,0.66745,0.20871,0.11212,0.01172,0.87616,0.49172,0.28365,0.15419,0.07188,2022-12-18 17:56:44 UTC
199 | 2022-11-24 20:56:17 UTC,England,B,86.26103,2.70131,0.52347,2.13353,0.51206,0.35441,5.72536,9.44639,3.72103,0.78495,0.14815,0.05782,0.00908,0.9331,0.58574,0.30624,0.15614,0.07118,2022-12-18 17:56:44 UTC
200 | 2022-11-24 20:56:17 UTC,Argentina,C,86.09354,2.57779,0.466,1.08527,0.55644,1.35829,0.54682,4.08952,3.5427,0.23508,0.30558,0.22864,0.2307,0.54066,0.31108,0.18949,0.09295,0.04724,2022-12-18 17:56:44 UTC
201 | 2022-11-24 20:56:17 UTC,Germany,E,88.72557,3.21022,0.6427,1.08993,0.39472,1.51535,0.70256,4.96288,4.26032,0.03546,0.29247,0.58851,0.08356,0.32793,0.21221,0.12057,0.06744,0.03269,2022-12-18 17:56:44 UTC
202 | 2022-11-24 20:56:17 UTC,Belgium,F,80.53709,2.52178,0.72241,1.77229,0.56993,0.65778,1.24981,3.74306,2.49325,0.54059,0.23882,0.17162,0.04897,0.77941,0.34298,0.1418,0.06427,0.02415,2022-12-18 17:56:44 UTC
203 | 2022-11-24 20:56:17 UTC,Denmark,D,78.86992,2.17826,0.5851,0.76562,1.54234,0.69204,0.15956,2.56467,2.40511,0.15307,0.41237,0.29935,0.13521,0.56544,0.32475,0.15557,0.05583,0.0229,2022-12-18 17:56:44 UTC
204 | 2022-11-24 20:56:17 UTC,Uruguay,H,79.70107,2.11082,0.5055,0.82117,1.58766,0.59117,0.45966,2.43158,1.97192,0.20312,0.36372,0.29819,0.13497,0.56684,0.21465,0.10274,0.05081,0.02099,2022-12-18 17:56:44 UTC
205 | 2022-11-24 20:56:17 UTC,Croatia,F,78.46106,2.16026,0.59205,0.75833,1.58667,0.655,0.21102,2.5944,2.38338,0.22433,0.2918,0.27318,0.21069,0.51613,0.2113,0.08519,0.04148,0.01684,2022-12-18 17:56:44 UTC
206 | 2022-11-24 20:56:17 UTC,Switzerland,G,77.52036,2.16944,0.64044,1.50987,0.53487,0.95526,0.00949,2.95887,2.94938,0.13199,0.53827,0.30243,0.02731,0.67026,0.27479,0.11839,0.04922,0.01659,2022-12-18 17:56:44 UTC
207 | 2022-11-24 20:56:17 UTC,Ecuador,A,74.37289,1.934,0.61854,1.57339,0.61012,0.81649,1.47661,3.97477,2.49816,0.25698,0.47998,0.25169,0.01135,0.73696,0.3151,0.13165,0.0449,0.01584,2022-12-18 17:56:44 UTC
208 | 2022-11-24 20:56:17 UTC,Japan,E,71.98065,2.03674,0.79447,1.73706,0.48563,0.77731,0.84473,4.48901,3.64428,0.21516,0.53097,0.2469,0.00697,0.74613,0.31862,0.10747,0.04304,0.01433,2022-12-18 17:56:44 UTC
209 | 2022-11-24 20:56:17 UTC,Morocco,F,74.6733,1.96111,0.62462,0.66524,1.6009,0.73386,-0.154,2.31627,2.47027,0.17695,0.26903,0.29998,0.25404,0.44598,0.1596,0.05628,0.02472,0.00904,2022-12-18 17:56:44 UTC
210 | 2022-11-24 20:56:17 UTC,Mexico,C,73.47596,1.89685,0.63005,0.66514,1.59635,0.73851,-0.15316,2.14794,2.3011,0.2019,0.22454,0.30673,0.26683,0.42644,0.17268,0.07517,0.02449,0.00897,2022-12-18 17:56:44 UTC
211 | 2022-11-24 20:56:17 UTC,USA,B,72.62673,2.00526,0.74344,0.60104,1.559,0.83996,-0.5522,3.21355,3.76575,0.11257,0.33627,0.33529,0.21587,0.44884,0.17274,0.07378,0.02176,0.00809,2022-12-18 17:56:44 UTC
212 | 2022-11-24 20:56:17 UTC,Serbia,G,74.55183,2.10043,0.72657,0.77051,0.59446,1.63503,-1.72837,2.5109,4.23927,0.01129,0.28561,0.39815,0.30495,0.2969,0.11168,0.04855,0.02049,0.00672,2022-12-18 17:56:44 UTC
213 | 2022-11-24 20:56:17 UTC,Senegal,A,73.22583,1.8886,0.63462,0.85635,0.5945,1.54915,-1.31886,2.63664,3.9555,0.02322,0.24269,0.48286,0.25123,0.26591,0.10595,0.04184,0.01634,0.00581,2022-12-18 17:56:44 UTC
214 | 2022-11-24 20:56:17 UTC,South Korea,H,66.43505,1.66252,0.74092,0.61698,1.58058,0.80244,-0.46737,2.02442,2.49179,0.11503,0.27161,0.36974,0.24362,0.38664,0.10383,0.03815,0.01531,0.00483,2022-12-18 17:56:44 UTC
215 | 2022-11-24 20:56:17 UTC,Poland,C,68.14371,1.79246,0.77364,0.56516,1.56449,0.87035,-0.68039,2.03074,2.71113,0.15536,0.19699,0.2907,0.35695,0.35235,0.12171,0.04645,0.0131,0.00452,2022-12-18 17:56:44 UTC
216 | 2022-11-24 20:56:17 UTC,Wales,B,67.63678,1.74862,0.76031,0.50869,1.57058,0.92073,-0.91418,2.89141,3.80559,0.08373,0.28544,0.36121,0.26962,0.36917,0.12593,0.04936,0.01302,0.00435,2022-12-18 17:56:44 UTC
217 | 2022-11-24 20:56:17 UTC,Tunisia,D,66.4768,1.6014,0.69051,0.51099,1.56864,0.92037,-0.93527,1.77984,2.71511,0.06737,0.26656,0.39983,0.26624,0.33393,0.14805,0.05239,0.01326,0.00432,2022-12-18 17:56:44 UTC
218 | 2022-11-24 20:56:17 UTC,Canada,F,73.84345,2.02414,0.70416,0.61657,0.61764,1.76579,-1.30683,2.11059,3.41742,0.05813,0.20035,0.25522,0.4863,0.25848,0.08643,0.02833,0.01199,0.00427,2022-12-18 17:56:44 UTC
219 | 2022-11-24 20:56:17 UTC,Saudi Arabia,C,59.01259,1.57188,0.96706,1.52359,0.6044,0.87201,0.28673,3.92271,3.63598,0.40766,0.27289,0.17393,0.14552,0.68055,0.19361,0.05947,0.01128,0.00288,2022-12-18 17:56:44 UTC
220 | 2022-11-24 20:56:17 UTC,Iran,B,63.32507,1.64128,0.84941,0.62716,0.61752,1.75532,-4.25898,4.12495,8.38393,0.01875,0.23014,0.24568,0.50543,0.24889,0.08052,0.03273,0.00781,0.0022,2022-12-18 17:56:44 UTC
221 | 2022-11-24 20:56:17 UTC,Australia,D,58.64544,1.5739,0.98422,0.47355,0.59262,1.93383,-3.97177,2.77507,6.74684,0.01044,0.16029,0.23643,0.59284,0.17073,0.06924,0.02226,0.00441,0.00117,2022-12-18 17:56:44 UTC
222 | 2022-11-24 20:56:17 UTC,Cameroon,G,63.62287,1.59463,0.79825,0.28323,0.45682,2.25995,-3.34378,1.24726,4.59104,0.00441,0.04494,0.2839,0.66675,0.04935,0.01582,0.00554,0.0021,0.00061,2022-12-18 17:56:44 UTC
223 | 2022-11-24 20:56:17 UTC,Ghana,H,60.03229,1.50523,0.8658,0.38635,0.61211,2.00154,-2.22472,3.42529,5.65001,0.0144,0.15596,0.21995,0.60969,0.17036,0.0252,0.00636,0.00206,0.0005,2022-12-18 17:56:44 UTC
224 | 2022-11-24 20:56:17 UTC,Qatar,A,48.16112,1.42811,1.30017,0.30538,0.43861,2.25601,-4.3844,1.79336,6.17776,0.00748,0.04027,0.21984,0.73241,0.04775,0.01269,0.00332,0.00077,0.00023,2022-12-18 17:56:44 UTC
225 | 2022-11-24 20:56:17 UTC,Costa Rica,E,51.99243,1.32127,1.02265,0.20353,0.38891,2.40756,-10.08883,1.29898,11.38781,0.00118,0.02266,0.06748,0.90868,0.02384,0.00506,0.00097,0.00018,2.0e-05,2022-12-18 17:56:44 UTC
226 | 2022-11-16 16:00:55 UTC,Brazil,G,93.54699,3.22213,0.29634,2.11474,0.59456,0.2907,4.46304,6.30163,1.83859,0.71639,0.19406,0.06846,0.02109,0.91045,0.68867,0.46381,0.32477,0.21668,2022-12-18 17:56:44 UTC
227 | 2022-11-16 16:00:55 UTC,Spain,E,89.50604,2.80203,0.38627,1.76309,0.69769,0.53922,2.88009,5.46797,2.58788,0.4684,0.33846,0.15418,0.03896,0.80686,0.55576,0.30279,0.18857,0.10663,2022-12-18 17:56:44 UTC
228 | 2022-11-16 16:00:55 UTC,France,D,87.70516,2.77362,0.47923,1.78422,0.73505,0.48073,2.96537,5.30739,2.34202,0.55358,0.27328,0.12328,0.04986,0.82686,0.54053,0.33135,0.17187,0.0875,2022-12-18 17:56:44 UTC
229 | 2022-11-16 16:00:55 UTC,Argentina,C,87.20776,2.62755,0.4317,1.83671,0.73199,0.4313,3.16936,5.33484,2.16548,0.59722,0.24273,0.11295,0.0471,0.83995,0.53091,0.32755,0.15944,0.08476,2022-12-18 17:56:44 UTC
230 | 2022-11-16 16:00:55 UTC,Portugal,H,87.77456,2.78861,0.48293,1.74211,0.74742,0.51047,2.80761,5.18913,2.38152,0.53461,0.27626,0.13468,0.05445,0.81087,0.45583,0.26028,0.15248,0.07629,2022-12-18 17:56:44 UTC
231 | 2022-11-16 16:00:55 UTC,Germany,E,88.7737,3.17168,0.61922,1.65986,0.65542,0.68472,2.55211,5.8586,3.30649,0.40333,0.36091,0.18128,0.05448,0.76424,0.49584,0.24828,0.14385,0.07425,2022-12-18 17:56:44 UTC
232 | 2022-11-16 16:00:55 UTC,England,B,85.95712,2.553,0.45994,1.71265,0.79415,0.4932,2.62876,4.87722,2.24846,0.55445,0.24981,0.12986,0.06588,0.80426,0.51608,0.28996,0.14689,0.07136,2022-12-18 17:56:44 UTC
233 | 2022-11-16 16:00:55 UTC,Netherlands,A,86.01102,2.79647,0.58975,1.73222,0.71039,0.55739,2.89991,5.86382,2.96391,0.53223,0.25783,0.14552,0.06442,0.79006,0.4899,0.2666,0.11908,0.0596,2022-12-18 17:56:44 UTC
234 | 2022-11-16 16:00:55 UTC,Denmark,D,80.01595,2.2889,0.60196,1.31537,0.83937,0.84526,0.99315,4.09363,3.10048,0.29056,0.35779,0.22531,0.12634,0.64835,0.33253,0.16865,0.06883,0.02842,2022-12-18 17:56:44 UTC
235 | 2022-11-16 16:00:55 UTC,Uruguay,H,80.90448,2.25529,0.53963,1.32689,0.86229,0.81082,1.06659,3.96556,2.89897,0.29815,0.35459,0.22909,0.11817,0.65274,0.28244,0.13261,0.06615,0.02828,2022-12-18 17:56:44 UTC
236 | 2022-11-16 16:00:55 UTC,Belgium,F,82.49005,2.62457,0.6845,1.32798,0.8056,0.86642,1.04043,4.71514,3.67471,0.35643,0.26757,0.21261,0.16339,0.624,0.27365,0.12034,0.06141,0.02608,2022-12-18 17:56:44 UTC
237 | 2022-11-16 16:00:55 UTC,Croatia,F,78.84025,2.28577,0.65525,1.15695,0.84997,0.99308,0.32548,4.07091,3.74543,0.27547,0.26872,0.2432,0.21261,0.54419,0.21411,0.08819,0.04219,0.01702,2022-12-18 17:56:44 UTC
238 | 2022-11-16 16:00:55 UTC,Switzerland,G,77.64665,2.23118,0.67527,1.01246,0.79286,1.19468,-0.49222,3.61276,4.10498,0.13455,0.34406,0.30746,0.21393,0.47861,0.20741,0.0888,0.03948,0.01455,2022-12-18 17:56:44 UTC
239 | 2022-11-16 16:00:55 UTC,USA,B,74.83489,2.11382,0.7233,1.08538,0.87897,1.03565,0.07698,3.58459,3.50761,0.2214,0.30813,0.26353,0.20694,0.52953,0.24297,0.10082,0.03517,0.01304,2022-12-18 17:56:44 UTC
240 | 2022-11-16 16:00:55 UTC,Mexico,C,74.29647,2.00635,0.67211,1.10911,0.86111,1.02978,0.15824,3.62095,3.46271,0.20717,0.32919,0.27301,0.19063,0.53636,0.22207,0.09943,0.03394,0.01268,2022-12-18 17:56:44 UTC
241 | 2022-11-16 16:00:55 UTC,Senegal,A,73.8414,1.94597,0.64928,1.10327,0.84656,1.05017,0.13989,3.84251,3.70262,0.20957,0.30172,0.29356,0.19515,0.51129,0.23152,0.09563,0.03294,0.01199,2022-12-18 17:56:44 UTC
242 | 2022-11-16 16:00:55 UTC,Ecuador,A,72.74127,1.95582,0.70294,1.06051,0.83314,1.10635,-0.08847,3.80594,3.89441,0.19014,0.29195,0.30458,0.21333,0.48209,0.20916,0.08389,0.02817,0.01022,2022-12-18 17:56:44 UTC
243 | 2022-11-16 16:00:55 UTC,Morocco,F,75.62263,2.10023,0.67896,1.00739,0.86128,1.13133,-0.27965,3.68217,3.96182,0.21422,0.25051,0.26928,0.26599,0.46473,0.16532,0.06159,0.02701,0.01021,2022-12-18 17:56:44 UTC
244 | 2022-11-16 16:00:55 UTC,Serbia,G,75.83904,2.21814,0.74974,0.91609,0.77856,1.30535,-0.98479,3.4681,4.45289,0.10954,0.30341,0.33362,0.25343,0.41295,0.16587,0.06658,0.02878,0.01,2022-12-18 17:56:44 UTC
245 | 2022-11-16 16:00:55 UTC,Japan,E,71.43695,1.98575,0.78071,0.9156,0.76006,1.32434,-1.03341,3.51877,4.55218,0.11084,0.23408,0.43682,0.21826,0.34492,0.1576,0.05775,0.02465,0.00876,2022-12-18 17:56:44 UTC
246 | 2022-11-16 16:00:55 UTC,Canada,F,71.58583,1.94737,0.74608,0.82211,0.85429,1.3236,-1.08626,3.26725,4.35351,0.15388,0.2132,0.27491,0.35801,0.36708,0.11482,0.03869,0.01591,0.0055,2022-12-18 17:56:44 UTC
247 | 2022-11-16 16:00:55 UTC,Poland,C,68.28098,1.87603,0.83283,0.84879,0.83305,1.31816,-1.06316,3.14758,4.21074,0.12588,0.25332,0.31968,0.30112,0.3792,0.12938,0.05029,0.01471,0.00463,2022-12-18 17:56:44 UTC
248 | 2022-11-16 16:00:55 UTC,South Korea,H,66.12313,1.73414,0.81094,0.82649,0.85594,1.31757,-1.13309,2.91359,4.04668,0.12062,0.23574,0.35148,0.29216,0.35636,0.10596,0.03783,0.01429,0.00449,2022-12-18 17:56:44 UTC
249 | 2022-11-16 16:00:55 UTC,Tunisia,D,65.85461,1.63339,0.74077,0.73256,0.86585,1.40159,-1.46599,2.62304,4.08903,0.09675,0.21187,0.34901,0.34237,0.30862,0.11045,0.04178,0.01166,0.00382,2022-12-18 17:56:44 UTC
250 | 2022-11-16 16:00:55 UTC,Iran,B,62.17412,1.51146,0.78563,0.75007,0.9078,1.34213,-1.23015,2.62104,3.85119,0.1152,0.22687,0.3076,0.35033,0.34207,0.12694,0.04371,0.01241,0.00365,2022-12-18 17:56:44 UTC
251 | 2022-11-16 16:00:55 UTC,Wales,B,65.58314,1.7128,0.81593,0.72363,0.87562,1.40075,-1.47559,2.67891,4.1545,0.10895,0.21519,0.29901,0.37685,0.32414,0.11755,0.03968,0.01153,0.00345,2022-12-18 17:56:44 UTC
252 | 2022-11-16 16:00:55 UTC,Cameroon,G,64.15924,1.65744,0.82883,0.5109,0.72564,1.76346,-2.98603,2.30607,5.2921,0.03952,0.15847,0.29046,0.51155,0.19799,0.05796,0.01791,0.00597,0.00167,2022-12-18 17:56:44 UTC
253 | 2022-11-16 16:00:55 UTC,Saudi Arabia,C,56.86592,1.50018,0.99118,0.59721,0.79021,1.61258,-2.26444,2.55321,4.81765,0.06973,0.17476,0.29436,0.46115,0.24449,0.06913,0.02164,0.00516,0.00132,2022-12-18 17:56:44 UTC
254 | 2022-11-16 16:00:55 UTC,Australia,D,60.83178,1.59388,0.91112,0.55148,0.79247,1.65605,-2.49253,2.36908,4.86161,0.05911,0.15706,0.3024,0.48143,0.21617,0.065,0.02062,0.00454,0.00124,2022-12-18 17:56:44 UTC
255 | 2022-11-16 16:00:55 UTC,Qatar,A,51.00223,1.57111,1.31642,0.56555,0.68681,1.74764,-2.95133,3.11894,6.07027,0.06806,0.1485,0.25634,0.5271,0.21656,0.06588,0.0184,0.00399,0.00096,2022-12-18 17:56:44 UTC
256 | 2022-11-16 16:00:55 UTC,Ghana,H,58.62702,1.43347,0.85806,0.4673,0.80877,1.72393,-2.74111,1.99867,4.73978,0.04662,0.13341,0.28475,0.53522,0.18003,0.03586,0.00945,0.00284,0.00063,2022-12-18 17:56:44 UTC
257 | 2022-11-16 16:00:55 UTC,Costa Rica,E,55.45518,1.39816,0.95388,0.29847,0.61279,2.08874,-4.39879,1.8086,6.20739,0.01743,0.06655,0.22772,0.6883,0.08398,0.0229,0.0051,0.00132,0.00032,2022-12-18 17:56:44 UTC
258 |
--------------------------------------------------------------------------------
/python-to-c++/cc/world-cup-2022/wc_matches.csv:
--------------------------------------------------------------------------------
1 | date,league_id,league,team1,team2,spi1,spi2,prob1,prob2,probtie,proj_score1,proj_score2,score1,score2,xg1,xg2,nsxg1,nsxg2,adj_score1,adj_score2
2 | 2022-11-20,1908,FIFA World Cup,Qatar,Ecuador,51.0,72.74,0.2369,0.5045,0.2586,1.13,1.75,0,2,0.23,1.14,0.24,1.35,0.0,2.1
3 | 2022-11-21,1908,FIFA World Cup,England,Iran,85.96,62.17,0.6274,0.1187,0.2539,1.7,0.58,6,2,1.04,1.45,1.5,0.32,5.78,2.1
4 | 2022-11-21,1908,FIFA World Cup,Senegal,Netherlands,73.84,86.01,0.2235,0.5053,0.2712,0.99,1.63,0,2,0.7,0.68,1.22,1.83,0.0,1.58
5 | 2022-11-21,1908,FIFA World Cup,USA,Wales,74.83,65.58,0.4489,0.2591,0.292,1.42,1.01,1,1,0.33,1.78,0.48,0.95,1.05,1.05
6 | 2022-11-22,1908,FIFA World Cup,Argentina,Saudi Arabia,87.21,56.87,0.7228,0.0807,0.1966,2.11,0.54,1,2,1.63,0.15,2.4,0.53,1.05,2.1
7 | 2022-11-22,1908,FIFA World Cup,Denmark,Tunisia,80.02,65.85,0.5001,0.2054,0.2945,1.44,0.82,0,0,0.66,1.16,1.33,0.69,0.0,0.0
8 | 2022-11-22,1908,FIFA World Cup,Mexico,Poland,74.3,68.28,0.4238,0.2802,0.296,1.37,1.06,0,0,0.45,1.02,1.19,0.49,0.0,0.0
9 | 2022-11-22,1908,FIFA World Cup,France,Australia,87.71,60.83,0.6921,0.1009,0.207,2.09,0.65,4,1,3.03,0.26,3.01,0.3,4.18,1.05
10 | 2022-11-23,1908,FIFA World Cup,Morocco,Croatia,75.62,78.84,0.3176,0.3898,0.2926,1.18,1.34,0,0,0.28,0.88,0.54,0.64,0.0,0.0
11 | 2022-11-23,1908,FIFA World Cup,Germany,Japan,88.77,71.44,0.6041,0.174,0.2219,2.14,1.06,1,2,3.1,1.2,3.1,0.85,1.05,2.1
12 | 2022-11-23,1908,FIFA World Cup,Spain,Costa Rica,89.51,55.46,0.7623,0.0595,0.1781,2.19,0.44,7,0,2.39,0.0,1.71,0.15,6.22,0.0
13 | 2022-11-23,1908,FIFA World Cup,Belgium,Canada,82.49,71.59,0.4888,0.2462,0.265,1.68,1.12,1,0,0.65,2.6,1.18,2.31,1.05,0.0
14 | 2022-11-24,1908,FIFA World Cup,Switzerland,Cameroon,77.65,64.16,0.4991,0.2186,0.2823,1.53,0.92,1,0,1.0,0.61,1.16,0.9,1.05,0.0
15 | 2022-11-24,1908,FIFA World Cup,Uruguay,South Korea,80.9,66.12,0.5256,0.1906,0.2838,1.52,0.8,0,0,0.48,0.4,0.89,0.74,0.0,0.0
16 | 2022-11-24,1908,FIFA World Cup,Portugal,Ghana,87.77,58.63,0.6974,0.0912,0.2114,2.0,0.56,3,2,1.89,0.52,1.63,0.27,2.9,2.1
17 | 2022-11-24,1908,FIFA World Cup,Brazil,Serbia,93.55,75.84,0.6787,0.1124,0.2089,2.11,0.72,2,0,1.48,0.18,1.4,0.36,2.02,0.0
18 | 2022-11-25,1908,FIFA World Cup,Wales,Iran,67.64,63.33,0.3875,0.2969,0.3156,1.2,1.01,0,2,0.9,1.43,0.89,1.67,0.0,1.26
19 | 2022-11-25,1908,FIFA World Cup,Qatar,Senegal,48.16,73.23,0.2098,0.5228,0.2674,0.96,1.66,1,3,0.94,0.75,1.06,1.28,1.05,2.81
20 | 2022-11-25,1908,FIFA World Cup,Netherlands,Ecuador,86.07,74.37,0.4949,0.2248,0.2803,1.55,0.95,1,1,0.07,0.8,0.43,1.09,1.05,1.05
21 | 2022-11-25,1908,FIFA World Cup,England,USA,86.26,72.63,0.5436,0.1965,0.2598,1.73,0.94,0,0,0.62,0.52,1.34,0.74,0.0,0.0
22 | 2022-11-26,1908,FIFA World Cup,Tunisia,Australia,66.48,58.65,0.3883,0.2894,0.3223,1.16,0.96,0,1,0.89,0.5,1.3,0.65,0.0,1.05
23 | 2022-11-26,1908,FIFA World Cup,Poland,Saudi Arabia,68.14,59.01,0.4061,0.2911,0.3029,1.3,1.05,2,0,1.73,2.17,1.6,1.16,1.8,0.0
24 | 2022-11-26,1908,FIFA World Cup,France,Denmark,89.25,78.87,0.5064,0.2192,0.2744,1.6,0.96,2,1,2.06,0.5,2.3,0.7,2.1,1.05
25 | 2022-11-26,1908,FIFA World Cup,Argentina,Mexico,86.09,73.48,0.5079,0.1993,0.2928,1.45,0.8,2,0,0.26,0.18,0.72,0.45,1.66,0.0
26 | 2022-11-27,1908,FIFA World Cup,Japan,Costa Rica,71.98,51.99,0.5955,0.1498,0.2547,1.74,0.74,0,1,0.7,0.14,1.15,0.09,0.0,1.05
27 | 2022-11-27,1908,FIFA World Cup,Belgium,Morocco,80.54,74.67,0.407,0.3057,0.2873,1.41,1.18,0,2,0.88,0.48,0.91,0.42,0.0,1.58
28 | 2022-11-27,1908,FIFA World Cup,Croatia,Canada,78.46,73.84,0.4069,0.2893,0.3037,1.29,1.05,4,1,1.56,0.37,1.6,0.85,3.68,1.05
29 | 2022-11-27,1908,FIFA World Cup,Spain,Germany,91.22,88.73,0.4619,0.2781,0.26,1.72,1.28,1,1,0.57,0.91,1.32,1.06,1.05,1.05
30 | 2022-11-28,1908,FIFA World Cup,Cameroon,Serbia,63.62,74.55,0.2444,0.4575,0.2981,0.94,1.39,3,3,0.91,1.2,0.85,1.95,3.15,3.15
31 | 2022-11-28,1908,FIFA World Cup,South Korea,Ghana,66.44,60.03,0.443,0.2348,0.3222,1.23,0.81,2,3,1.56,0.51,2.31,0.73,2.1,3.15
32 | 2022-11-28,1908,FIFA World Cup,Brazil,Switzerland,93.66,77.52,0.6427,0.1202,0.2372,1.84,0.65,1,0,1.46,0.27,1.23,0.61,1.05,0.0
33 | 2022-11-28,1908,FIFA World Cup,Portugal,Uruguay,87.3,79.7,0.4392,0.2628,0.298,1.37,1.0,2,0,1.42,1.18,1.28,1.36,1.58,0.0
34 | 2022-11-29,1908,FIFA World Cup,Netherlands,Qatar,84.38,48.46,0.7768,0.0696,0.1536,2.6,0.65,2,0,1.36,0.19,1.06,0.45,2.1,0.0
35 | 2022-11-29,1908,FIFA World Cup,Ecuador,Senegal,75.82,73.0,0.3668,0.2961,0.3371,1.06,0.92,1,2,0.61,1.73,0.77,1.14,1.05,2.1
36 | 2022-11-29,1908,FIFA World Cup,Iran,USA,65.77,72.55,0.3082,0.3764,0.3154,1.04,1.18,0,1,0.75,0.92,1.1,1.17,0.0,1.05
37 | 2022-11-29,1908,FIFA World Cup,Wales,England,65.17,85.41,0.1437,0.6,0.2564,0.7,1.72,0,3,0.28,1.8,0.32,1.93,0.0,3.15
38 | 2022-11-30,1908,FIFA World Cup,Tunisia,France,65.92,90.15,0.1116,0.651,0.2374,0.6,1.82,1,0,0.29,0.43,0.61,1.21,1.05,0.0
39 | 2022-11-30,1908,FIFA World Cup,Australia,Denmark,58.8,77.68,0.1985,0.522,0.2795,0.85,1.56,1,0,0.47,0.62,0.4,1.75,1.05,0.0
40 | 2022-11-30,1908,FIFA World Cup,Poland,Argentina,68.95,86.03,0.1547,0.5784,0.2669,0.71,1.64,0,2,0.24,3.28,0.32,2.24,0.0,2.1
41 | 2022-11-30,1908,FIFA World Cup,Saudi Arabia,Mexico,58.41,72.44,0.2307,0.4627,0.3066,0.86,1.34,1,2,0.62,1.81,0.71,2.27,1.05,2.1
42 | 2022-12-01,1908,FIFA World Cup,Canada,Morocco,71.52,74.99,0.2898,0.3956,0.3147,0.99,1.21,1,2,0.98,0.37,0.68,0.24,1.05,2.1
43 | 2022-12-01,1908,FIFA World Cup,Croatia,Belgium,80.87,79.44,0.3881,0.3253,0.2866,1.38,1.24,0,0,0.63,2.62,1.44,1.92,0.0,0.0
44 | 2022-12-01,1908,FIFA World Cup,Costa Rica,Germany,52.9,88.86,0.0512,0.8045,0.1442,0.5,2.55,2,4,1.27,4.41,0.33,5.9,2.1,3.72
45 | 2022-12-01,1908,FIFA World Cup,Japan,Spain,70.43,90.62,0.1391,0.6135,0.2474,0.71,1.79,2,1,0.53,0.79,0.81,1.1,2.1,1.05
46 | 2022-12-02,1908,FIFA World Cup,Ghana,Uruguay,60.5,79.28,0.1564,0.5669,0.2766,0.68,1.57,0,2,1.35,1.12,0.73,1.44,0.0,2.1
47 | 2022-12-02,1908,FIFA World Cup,South Korea,Portugal,66.93,87.55,0.1666,0.5866,0.2468,0.86,1.84,2,1,0.85,0.9,0.72,0.64,2.1,1.05
48 | 2022-12-02,1908,FIFA World Cup,Serbia,Switzerland,74.72,77.0,0.3126,0.3965,0.2909,1.18,1.36,2,3,0.64,2.42,1.47,1.28,2.1,3.15
49 | 2022-12-02,1908,FIFA World Cup,Cameroon,Brazil,64.48,93.48,0.0363,0.8112,0.1524,0.31,2.29,1,0,0.38,2.75,0.81,2.99,1.05,0.0
50 | 2022-12-03,1908,FIFA World Cup,Netherlands,USA,83.97,73.07,0.6551,0.3449,0.0,1.42,0.88,3,1,1.16,1.43,1.4,1.08,2.87,1.05
51 | 2022-12-03,1908,FIFA World Cup,Argentina,Australia,87.98,59.35,0.8261,0.1739,0.0,1.85,0.57,2,1,1.27,0.32,1.32,0.92,2.1,1.05
52 | 2022-12-04,1908,FIFA World Cup,France,Poland,88.57,65.77,0.8133,0.1867,0.0,1.99,0.71,3,1,1.17,1.91,1.54,0.85,2.52,1.05
53 | 2022-12-04,1908,FIFA World Cup,England,Senegal,86.97,75.47,0.6814,0.3186,0.0,1.47,0.83,3,0,0.87,1.09,0.97,0.62,3.15,0.0
54 | 2022-12-05,1908,FIFA World Cup,Japan,Croatia,73.02,79.14,0.454,0.546,0.0,1.1,1.27,1,1,1.55,1.43,0.94,1.61,1.05,1.05
55 | 2022-12-05,1908,FIFA World Cup,Brazil,South Korea,92.9,69.4,0.8261,0.1739,0.0,1.89,0.58,4,1,2.96,0.67,1.56,0.69,4.2,1.05
56 | 2022-12-06,1908,FIFA World Cup,Morocco,Spain,74.42,89.2,0.2711,0.7289,0.0,0.65,1.44,0,0,0.69,1.01,0.67,1.58,0.0,0.0
57 | 2022-12-06,1908,FIFA World Cup,Portugal,Switzerland,85.8,78.51,0.6158,0.3842,0.0,1.51,1.08,6,1,1.34,0.98,1.42,0.7,5.78,1.05
58 | 2022-12-09,1908,FIFA World Cup,Croatia,Brazil,78.99,93.47,0.2264,0.7736,0.0,0.68,1.72,1,1,0.62,1.9,1.1,2.74,1.05,1.05
59 | 2022-12-09,1908,FIFA World Cup,Netherlands,Argentina,84.19,87.32,0.4238,0.5762,0.0,1.04,1.31,2,2,0.43,1.52,1.29,1.79,2.1,2.03
60 | 2022-12-10,1908,FIFA World Cup,Morocco,Portugal,74.45,87.92,0.3185,0.6815,0.0,0.83,1.46,1,0,0.57,1.11,0.67,1.32,1.05,0.0
61 | 2022-12-10,1908,FIFA World Cup,England,France,87.59,87.53,0.516,0.484,0.0,1.29,1.23,1,2,2.42,0.97,1.4,1.53,1.05,2.1
62 | 2022-12-13,1908,FIFA World Cup,Argentina,Croatia,87.46,79.37,0.6426,0.3574,0.0,1.33,0.84,3,0,1.69,0.53,1.3,1.16,3.15,0.0
63 | 2022-12-14,1908,FIFA World Cup,France,Morocco,87.72,75.13,0.6646,0.3354,0.0,1.38,0.82,2,0,1.4,0.79,1.43,0.7,1.87,0.0
64 | 2022-12-17,1908,FIFA World Cup,Croatia,Morocco,77.65,73.92,0.5325,0.4675,0.0,0.97,0.88,2,1,0.76,0.96,1.52,0.73,2.1,1.05
65 | 2022-12-18,1908,FIFA World Cup,Argentina,France,88.86,88.41,0.5321,0.4679,0.0,1.3,1.18,3,3,2.81,2.25,2.36,0.76,3.15,3.15
66 |
--------------------------------------------------------------------------------
/python-to-c++/explain-the-binds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/python-to-c++/explain-the-binds.png
--------------------------------------------------------------------------------
/python-to-c++/full-generation-prompt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/python-to-c++/full-generation-prompt.png
--------------------------------------------------------------------------------
/python-to-c++/py/clean.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | rm -rf world-cup-2022/wc_forecasts_*
--------------------------------------------------------------------------------
/python-to-c++/py/csvinteresting.py:
--------------------------------------------------------------------------------
1 | import csv
2 | import re
3 | import types
4 |
5 | class CSVReader:
6 | def __init__(self, file_path):
7 | self.file_path = file_path
8 | self.data = []
9 | self.column_headings = []
10 | self.process_csv()
11 |
12 | self.predefined_column_filters = {
13 | 'contains': self.contains_filter,
14 | 'regex': self.regex_filter,
15 | 'prefix-match': self.prefix_match_filter,
16 | }
17 |
18 | def process_csv(self):
19 | with open(self.file_path, 'r') as csv_file:
20 | csv_reader = csv.reader(csv_file)
21 | self.column_headings = next(csv_reader)
22 | for row in csv_reader:
23 | self.data.append(row)
24 |
25 | def summary(self):
26 | num_rows = len(self.data)
27 | num_columns = len(self.column_headings)
28 | return {
29 | 'file_path': self.file_path,
30 | 'num_rows': num_rows,
31 | 'num_columns': num_columns,
32 | 'column_headings': self.column_headings
33 | }
34 |
35 | """
36 | Useful Utils
37 | """
38 | def filter_by_columns(self, columns_to_filter):
39 | """
40 | Filters the data to only include the specified columns.
41 |
42 | Args:
43 | columns_to_filter: List of column names to filter by.
44 |
45 | Raises:
46 | ValueError: If columns_to_filter is not a list.
47 | ValueError: If any column name in columns_to_filter is not found in the CSV file.
48 | """
49 | # Sanity check: columns_to_filter must be a list
50 | if not isinstance(columns_to_filter, list):
51 | raise ValueError("columns_to_filter must be a list of column names.")
52 |
53 | # Sanity check: all column names in columns_to_filter must be found in the CSV file
54 | for column in columns_to_filter:
55 | if column not in self.column_headings:
56 | raise ValueError(f"Column '{column}' not found in CSV file.")
57 |
58 | # Filter the data to only include the specified columns
59 | column_indices = [self.column_headings.index(column) for column in columns_to_filter]
60 | self.column_headings = columns_to_filter
61 | self.data = [[row[index] for index in column_indices] for row in self.data]
62 |
63 | """
64 | Predefined filters
65 | """
66 | def contains_filter(self, search_term, include_columns):
67 | """filter out the column that contains the search term"""
68 | columns_to_filter = []
69 | for column_heading in self.column_headings:
70 | if search_term in column_heading:
71 | columns_to_filter.append(column_heading)
72 | return self.filter_by_columns(columns_to_filter + include_columns)
73 |
74 | def prefix_match_filter(self, prefix, include_columns):
75 | """Filters the data to only include columns that start with the specified prefix."""
76 | columns_to_filter = []
77 | for column_heading in self.column_headings:
78 | if column_heading.startswith(prefix):
79 | columns_to_filter.append(column_heading)
80 | self.filter_by_columns(columns_to_filter + include_columns)
81 |
82 | def regex_filter(self, pattern, include_columns):
83 | """Filters the data to only include columns that match the regex pattern."""
84 | columns_to_filter = []
85 | for column_heading in self.column_headings:
86 | if re.search(pattern, column_heading):
87 | columns_to_filter.append(column_heading)
88 | self.filter_by_columns(columns_to_filter + include_columns)
89 |
90 | """
91 | Column operations
92 | """
93 | def get_column(self, column_name):
94 | """Returns a list of values from the specified column."""
95 | column_index = self.column_headings.index(column_name)
96 | return [row[column_index] for row in self.data]
97 |
98 | def search_column(self, column_name, search_term):
99 | """Returns rows where the specified column contains the search term."""
100 | column_index = self.column_headings.index(column_name)
101 | return [row for row in self.data if search_term in row[column_index]]
102 |
103 | def search_column_regex(self, column_name, pattern):
104 | """Returns rows where the specified column matches the regex pattern."""
105 | column_index = self.column_headings.index(column_name)
106 | return [row for row in self.data if re.search(pattern, row[column_index])]
107 |
108 | def replace_column_values_regex(self, column_name, pattern, new_value):
109 | """Replaces all values in the specified column that match the regex pattern with new_value."""
110 | column_index = self.column_headings.index(column_name)
111 | for row in self.data:
112 | if re.search(pattern, row[column_index]):
113 | row[column_index] = new_value
114 |
115 | def add_column(self, column_name, default_value=None):
116 | """Adds a new column with the specified name and fills it with the default value."""
117 | self.column_headings.append(column_name)
118 | for row in self.data:
119 | row.append(default_value)
120 |
121 | def delete_column(self, column_name):
122 | """Deletes the specified column."""
123 | column_index = self.column_headings.index(column_name)
124 | self.column_headings.pop(column_index)
125 | for row in self.data:
126 | row.pop(column_index)
127 |
128 | def rename_column(self, old_name, new_name):
129 | """Renames the specified column."""
130 | column_index = self.column_headings.index(old_name)
131 | self.column_headings[column_index] = new_name
132 |
133 | """
134 | Custom Operations
135 | """
136 | def group_by_column_and_filter(self, column_name, filter_tuple=None, aggregation_function=None):
137 | """
138 | Groups the data by the specified column, filters the columns, and aggregates each group independently.
139 |
140 | Creates the following files:
141 | 1. One CSV file per group, named after the group value.
142 | 2. One CSV file containing the aggregated data per group.
143 |
144 | Args:
145 | column_name: The column to group by.
146 | filter_tuple: A tuple with the (name of the filter function, its argument).
147 | aggregation_function: The function to use to aggregate the values in each group. Optional.
148 | """
149 |
150 | # Sanity check: filter_tuple must be a string
151 | if filter_tuple is not None:
152 | if not isinstance(filter_tuple, tuple) or len(filter_tuple) != 2:
153 | raise ValueError("filter_tuple must be a tuple of length 2 to filter by.")
154 |
155 | # First filter the columns
156 | if filter_tuple is not None:
157 | filter_func = self.predefined_column_filters[filter_tuple[0]]
158 | filter_func(filter_tuple[1], [column_name])
159 |
160 | # Sanity check: column_name must be found in the CSV file
161 | if column_name not in self.column_headings:
162 | raise ValueError(f"Column '{column_name}' not found in CSV file.")
163 |
164 |
165 | # Group the data by the specified column
166 | column_index = self.column_headings.index(column_name)
167 | groups = {}
168 | for row in self.data:
169 | group_key = row[column_index]
170 |
171 | if group_key not in groups:
172 | groups[group_key] = []
173 | groups[group_key].append(row)
174 |
175 | # Sanity check: aggregation_function must be a function
176 | if aggregation_function is not None:
177 | if not isinstance(aggregation_function, types.FunctionType):
178 | raise ValueError("aggregation_function must be a function.")
179 |
180 | # Aggregate the values in each group
181 | aggregations = {}
182 | if aggregation_function is not None:
183 | for group_key, group_data in groups.items():
184 | aggregations[group_key] = aggregation_function(group_data)
185 |
186 | # Make a new CSV file for each group
187 | for group_key, group_data in groups.items():
188 | file_path = f"{self.file_path.split('.')[0]}_{group_key}.csv"
189 | with open(file_path, 'w') as csv_file:
190 | csv_writer = csv.writer(csv_file)
191 | csv_writer.writerow(self.column_headings)
192 | csv_writer.writerows(group_data)
193 |
194 | # Write the aggregated data to a CSV file
195 | file_path = f"{self.file_path.split('.')[0]}_aggregations.csv"
196 | with open(file_path, 'w') as csv_file:
197 | csv_writer = csv.writer(csv_file)
198 | csv_writer.writerow([column_name, 'Aggregation'])
199 | for group_key, aggregation in aggregations.items():
200 | csv_writer.writerow([group_key, aggregation])
201 |
202 |
203 | if __name__ == '__main__':
204 | # read the data at world-cup-2022/wc_forecasts.csv
205 |
206 | csv_reader = CSVReader('world-cup-2022/wc_forecasts.csv')
207 |
208 | # print the column headings
209 | print(csv_reader.column_headings)
210 |
211 | # filter so that it contains sim
212 | csv_reader.group_by_column_and_filter('group', ("regex", '(sim)|(team)'), lambda x: len(x))
--------------------------------------------------------------------------------
/python-to-c++/py/run_py.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | python csvinteresting.py
4 |
--------------------------------------------------------------------------------
/python-to-c++/py/world-cup-2022/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | files:
3 | - https://projects.fivethirtyeight.com/soccer-api/international/2022/wc_matches.csv
4 | - https://projects.fivethirtyeight.com/soccer-api/international/2022/wc_forecasts.csv
5 | ---
6 | # World Cup 2022
7 |
8 | This file contains links to the data behind our [2022 World Cup Predictions](https://projects.fivethirtyeight.com/2022-world-cup-predictions/).
9 |
10 | `wc_matches.csv` contains match-by-match projections.
11 |
12 | `wc_forecasts.csv` contains our tournament forecasts.
13 |
--------------------------------------------------------------------------------
/python-to-c++/py/world-cup-2022/wc_forecasts.csv:
--------------------------------------------------------------------------------
1 | forecast_timestamp,team,group,spi,global_o,global_d,sim_wins,sim_ties,sim_losses,sim_goal_diff,goals_scored,goals_against,group_1,group_2,group_3,group_4,make_round_of_16,make_quarters,make_semis,make_final,win_league,timestamp
2 | 2022-12-18 17:56:03 UTC,Argentina,C,89.6486,2.8361,0.39397,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,2022-12-18 17:56:44 UTC
3 | 2022-12-18 17:56:03 UTC,France,D,88.30043,2.96765,0.54381,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.0,2022-12-18 17:56:44 UTC
4 | 2022-12-18 17:56:03 UTC,Morocco,F,73.16416,1.74313,0.53433,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
5 | 2022-12-18 17:56:03 UTC,Croatia,F,78.82038,2.20264,0.6029,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
6 | 2022-12-18 17:56:03 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
7 | 2022-12-18 17:56:03 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
8 | 2022-12-18 17:56:03 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
9 | 2022-12-18 17:56:03 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
10 | 2022-12-18 17:56:03 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
11 | 2022-12-18 17:56:03 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
12 | 2022-12-18 17:56:03 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
13 | 2022-12-18 17:56:03 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
14 | 2022-12-18 17:56:03 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
15 | 2022-12-18 17:56:03 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
16 | 2022-12-18 17:56:03 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
17 | 2022-12-18 17:56:03 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
18 | 2022-12-18 17:56:03 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
19 | 2022-12-18 17:56:03 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
20 | 2022-12-18 17:56:03 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
21 | 2022-12-18 17:56:03 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
22 | 2022-12-18 17:56:03 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
23 | 2022-12-18 17:56:03 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
24 | 2022-12-18 17:56:03 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
25 | 2022-12-18 17:56:03 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
26 | 2022-12-18 17:56:03 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
27 | 2022-12-18 17:56:03 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
28 | 2022-12-18 17:56:03 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
29 | 2022-12-18 17:56:03 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
30 | 2022-12-18 17:56:03 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
31 | 2022-12-18 17:56:03 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
32 | 2022-12-18 17:56:03 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
33 | 2022-12-18 17:56:03 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
34 | 2022-12-17 16:54:45 UTC,Argentina,C,88.85631,2.69895,0.37464,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.53027,2022-12-18 17:56:44 UTC
35 | 2022-12-17 16:54:45 UTC,France,D,88.41321,2.89548,0.49957,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.46973,2022-12-18 17:56:44 UTC
36 | 2022-12-17 16:54:45 UTC,Morocco,F,73.16416,1.74313,0.53433,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
37 | 2022-12-17 16:54:45 UTC,Croatia,F,78.82038,2.20264,0.6029,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,2022-12-18 17:56:44 UTC
38 | 2022-12-17 16:54:45 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
39 | 2022-12-17 16:54:45 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
40 | 2022-12-17 16:54:45 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
41 | 2022-12-17 16:54:45 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
42 | 2022-12-17 16:54:45 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
43 | 2022-12-17 16:54:45 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
44 | 2022-12-17 16:54:45 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
45 | 2022-12-17 16:54:45 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
46 | 2022-12-17 16:54:45 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
47 | 2022-12-17 16:54:45 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
48 | 2022-12-17 16:54:45 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
49 | 2022-12-17 16:54:45 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
50 | 2022-12-17 16:54:45 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
51 | 2022-12-17 16:54:45 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
52 | 2022-12-17 16:54:45 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
53 | 2022-12-17 16:54:45 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
54 | 2022-12-17 16:54:45 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
55 | 2022-12-17 16:54:45 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
56 | 2022-12-17 16:54:45 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
57 | 2022-12-17 16:54:45 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
58 | 2022-12-17 16:54:45 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
59 | 2022-12-17 16:54:45 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
60 | 2022-12-17 16:54:45 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
61 | 2022-12-17 16:54:45 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
62 | 2022-12-17 16:54:45 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
63 | 2022-12-17 16:54:45 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
64 | 2022-12-17 16:54:45 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
65 | 2022-12-17 16:54:45 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
66 | 2022-12-10 21:01:29 UTC,Argentina,C,87.45777,2.58007,0.39356,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.64042,0.36568,2022-12-18 17:56:44 UTC
67 | 2022-12-10 21:01:29 UTC,France,D,87.71519,2.86212,0.52477,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.66212,0.34861,2022-12-18 17:56:44 UTC
68 | 2022-12-10 21:01:29 UTC,Croatia,F,79.3709,2.17124,0.55799,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0,0.35958,0.15876,2022-12-18 17:56:44 UTC
69 | 2022-12-10 21:01:29 UTC,Morocco,F,75.13455,1.79236,0.49031,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,1.0,0.33788,0.12695,2022-12-18 17:56:44 UTC
70 | 2022-12-10 21:01:29 UTC,England,B,87.82131,2.71564,0.44261,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
71 | 2022-12-10 21:01:29 UTC,Netherlands,A,83.97533,2.52711,0.5494,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
72 | 2022-12-10 21:01:29 UTC,Portugal,H,87.02373,2.78069,0.52262,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
73 | 2022-12-10 21:01:29 UTC,Brazil,G,93.18946,3.122,0.28266,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
74 | 2022-12-10 21:01:29 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
75 | 2022-12-10 21:01:29 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
76 | 2022-12-10 21:01:29 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
77 | 2022-12-10 21:01:29 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
78 | 2022-12-10 21:01:29 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
79 | 2022-12-10 21:01:29 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
80 | 2022-12-10 21:01:29 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
81 | 2022-12-10 21:01:29 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
82 | 2022-12-10 21:01:29 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
83 | 2022-12-10 21:01:29 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
84 | 2022-12-10 21:01:29 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
85 | 2022-12-10 21:01:29 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
86 | 2022-12-10 21:01:29 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
87 | 2022-12-10 21:01:29 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
88 | 2022-12-10 21:01:29 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
89 | 2022-12-10 21:01:29 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
90 | 2022-12-10 21:01:29 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
91 | 2022-12-10 21:01:29 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
92 | 2022-12-10 21:01:29 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
93 | 2022-12-10 21:01:29 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
94 | 2022-12-10 21:01:29 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
95 | 2022-12-10 21:01:29 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
96 | 2022-12-10 21:01:29 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
97 | 2022-12-10 21:01:29 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
98 | 2022-12-06 20:54:12 UTC,Brazil,G,93.46631,3.17048,0.28151,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.77131,0.5071,0.32911,2022-12-18 17:56:44 UTC
99 | 2022-12-06 20:54:12 UTC,Portugal,H,87.92472,2.89158,0.52748,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,1.0,0.68251,0.32756,0.14112,2022-12-18 17:56:44 UTC
100 | 2022-12-06 20:54:12 UTC,England,B,87.58969,2.65733,0.42584,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.51539,0.29599,0.13556,2022-12-18 17:56:44 UTC
101 | 2022-12-06 20:54:12 UTC,Argentina,C,87.32471,2.5762,0.3988,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,1.0,0.57583,0.24429,0.13042,2022-12-18 17:56:44 UTC
102 | 2022-12-06 20:54:12 UTC,France,D,87.5287,2.80437,0.50561,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,1.0,0.48461,0.27046,0.11868,2022-12-18 17:56:44 UTC
103 | 2022-12-06 20:54:12 UTC,Netherlands,A,84.18963,2.54424,0.54804,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.42417,0.15471,0.07378,2022-12-18 17:56:44 UTC
104 | 2022-12-06 20:54:12 UTC,Croatia,F,78.99496,2.16748,0.5726,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,0.22869,0.0939,0.03901,2022-12-18 17:56:44 UTC
105 | 2022-12-06 20:54:12 UTC,Morocco,F,74.44986,1.80298,0.5249,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.31749,0.10599,0.03232,2022-12-18 17:56:44 UTC
106 | 2022-12-06 20:54:12 UTC,Japan,E,75.96229,2.04074,0.62372,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
107 | 2022-12-06 20:54:12 UTC,Senegal,A,74.43038,1.95825,0.63294,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
108 | 2022-12-06 20:54:12 UTC,Switzerland,G,76.42499,2.18629,0.70131,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
109 | 2022-12-06 20:54:12 UTC,Australia,D,64.25889,1.62507,0.79797,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
110 | 2022-12-06 20:54:12 UTC,USA,B,73.394,1.95077,0.6716,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
111 | 2022-12-06 20:54:12 UTC,Spain,E,88.50675,2.59723,0.34458,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
112 | 2022-12-06 20:54:12 UTC,South Korea,H,72.35291,1.95504,0.71893,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
113 | 2022-12-06 20:54:12 UTC,Poland,C,68.04764,1.84609,0.8194,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
114 | 2022-12-06 20:54:12 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
115 | 2022-12-06 20:54:12 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
116 | 2022-12-06 20:54:12 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
117 | 2022-12-06 20:54:12 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
118 | 2022-12-06 20:54:12 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
119 | 2022-12-06 20:54:12 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
120 | 2022-12-06 20:54:12 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
121 | 2022-12-06 20:54:12 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
122 | 2022-12-06 20:54:12 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
123 | 2022-12-06 20:54:12 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
124 | 2022-12-06 20:54:12 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
125 | 2022-12-06 20:54:12 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
126 | 2022-12-06 20:54:12 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
127 | 2022-12-06 20:54:12 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
128 | 2022-12-06 20:54:12 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
129 | 2022-12-06 20:54:12 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
130 | 2022-12-02 21:01:10 UTC,Brazil,G,92.89519,3.02538,0.26423,2.0,0.0,1.0,2.0,3.0,1.0,1.0,0.0,0.0,0.0,1.0,0.82453,0.63086,0.42125,0.26399,2022-12-18 17:56:44 UTC
131 | 2022-12-02 21:01:10 UTC,Spain,E,89.20054,2.72756,0.36851,1.0,1.0,1.0,6.0,9.0,3.0,0.0,1.0,0.0,0.0,1.0,0.73102,0.45168,0.25872,0.13534,2022-12-18 17:56:44 UTC
132 | 2022-12-02 21:01:10 UTC,Argentina,C,87.98006,2.61284,0.38151,2.0,0.0,1.0,3.0,5.0,2.0,1.0,0.0,0.0,0.0,1.0,0.82673,0.5156,0.24966,0.13119,2022-12-18 17:56:44 UTC
133 | 2022-12-02 21:01:10 UTC,France,D,88.57378,2.8376,0.46033,2.0,0.0,1.0,3.0,6.0,3.0,1.0,0.0,0.0,0.0,1.0,0.81511,0.46123,0.24482,0.12131,2022-12-18 17:56:44 UTC
134 | 2022-12-02 21:01:10 UTC,England,B,86.96946,2.62701,0.44455,2.0,1.0,0.0,7.0,9.0,2.0,1.0,0.0,0.0,0.0,1.0,0.68391,0.36842,0.19286,0.09399,2022-12-18 17:56:44 UTC
135 | 2022-12-02 21:01:10 UTC,Portugal,H,85.79833,2.68262,0.53904,2.0,0.0,1.0,2.0,6.0,4.0,1.0,0.0,0.0,0.0,1.0,0.61312,0.29093,0.14492,0.06613,2022-12-18 17:56:44 UTC
136 | 2022-12-02 21:01:10 UTC,Netherlands,A,83.97368,2.48412,0.52493,2.0,1.0,0.0,4.0,5.0,1.0,1.0,0.0,0.0,0.0,1.0,0.65454,0.31099,0.13043,0.06064,2022-12-18 17:56:44 UTC
137 | 2022-12-02 21:01:10 UTC,Croatia,F,79.13888,2.20274,0.58842,1.0,2.0,0.0,3.0,4.0,1.0,0.0,1.0,0.0,0.0,1.0,0.53989,0.16169,0.07053,0.02849,2022-12-18 17:56:44 UTC
138 | 2022-12-02 21:01:10 UTC,Switzerland,G,78.51106,2.21569,0.62543,2.0,0.0,1.0,1.0,4.0,3.0,0.0,1.0,0.0,0.0,1.0,0.38688,0.14682,0.05877,0.02126,2022-12-18 17:56:44 UTC
139 | 2022-12-02 21:01:10 UTC,Japan,E,76.1371,2.07616,0.63997,2.0,0.0,1.0,1.0,4.0,3.0,1.0,0.0,0.0,0.0,1.0,0.46011,0.12806,0.05155,0.01932,2022-12-18 17:56:44 UTC
140 | 2022-12-02 21:01:10 UTC,Senegal,A,75.46857,2.00641,0.62177,2.0,0.0,1.0,1.0,5.0,4.0,0.0,1.0,0.0,0.0,1.0,0.31609,0.1201,0.04418,0.01542,2022-12-18 17:56:44 UTC
141 | 2022-12-02 21:01:10 UTC,Morocco,F,74.42499,1.86603,0.56935,2.0,1.0,0.0,3.0,4.0,1.0,1.0,0.0,0.0,0.0,1.0,0.26898,0.11057,0.04279,0.01426,2022-12-18 17:56:44 UTC
142 | 2022-12-02 21:01:10 UTC,USA,B,73.06818,1.89806,0.6479,1.0,2.0,0.0,1.0,2.0,1.0,0.0,1.0,0.0,0.0,1.0,0.34546,0.11972,0.03617,0.01238,2022-12-18 17:56:44 UTC
143 | 2022-12-02 21:01:10 UTC,South Korea,H,72.73674,1.90456,0.66638,1.0,1.0,1.0,0.0,4.0,4.0,0.0,1.0,0.0,0.0,1.0,0.17547,0.07939,0.02912,0.01011,2022-12-18 17:56:44 UTC
144 | 2022-12-02 21:01:10 UTC,Poland,C,65.76676,1.74318,0.83295,1.0,1.0,1.0,0.0,2.0,2.0,0.0,1.0,0.0,0.0,1.0,0.18489,0.05025,0.01294,0.00331,2022-12-18 17:56:44 UTC
145 | 2022-12-02 21:01:10 UTC,Australia,D,63.05051,1.58682,0.8147,2.0,0.0,1.0,-1.0,3.0,4.0,0.0,1.0,0.0,0.0,1.0,0.17327,0.05369,0.01129,0.00286,2022-12-18 17:56:44 UTC
146 | 2022-12-02 21:01:10 UTC,Germany,E,89.95279,3.42799,0.66808,1.0,1.0,1.0,1.0,6.0,5.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
147 | 2022-12-02 21:01:10 UTC,Ecuador,A,73.83944,1.90031,0.61736,1.0,1.0,1.0,1.0,4.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
148 | 2022-12-02 21:01:10 UTC,Uruguay,H,79.24157,2.08441,0.50927,1.0,1.0,1.0,0.0,2.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
149 | 2022-12-02 21:01:10 UTC,Tunisia,D,67.83185,1.55967,0.60517,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
150 | 2022-12-02 21:01:10 UTC,Cameroon,G,66.37195,1.77502,0.83343,1.0,1.0,1.0,0.0,4.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
151 | 2022-12-02 21:01:10 UTC,Mexico,C,74.06856,1.87596,0.59088,1.0,1.0,1.0,-1.0,2.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
152 | 2022-12-02 21:01:10 UTC,Belgium,F,80.919,2.439,0.65161,1.0,1.0,1.0,-1.0,1.0,2.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
153 | 2022-12-02 21:01:10 UTC,Iran,B,68.30861,1.72082,0.71138,1.0,0.0,2.0,-3.0,4.0,7.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
154 | 2022-12-02 21:01:10 UTC,Saudi Arabia,C,60.44226,1.64961,0.97618,1.0,0.0,2.0,-2.0,3.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
155 | 2022-12-02 21:01:10 UTC,Ghana,H,60.56379,1.60095,0.92839,1.0,0.0,2.0,-2.0,5.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
156 | 2022-12-02 21:01:10 UTC,Costa Rica,E,52.66186,1.3806,1.05339,1.0,0.0,2.0,-8.0,3.0,11.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
157 | 2022-12-02 21:01:10 UTC,Denmark,D,76.6822,2.0458,0.59589,0.0,1.0,2.0,-2.0,1.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
158 | 2022-12-02 21:01:10 UTC,Serbia,G,73.86747,2.23251,0.85078,0.0,1.0,2.0,-3.0,5.0,8.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
159 | 2022-12-02 21:01:10 UTC,Wales,B,62.48125,1.58045,0.83224,0.0,1.0,2.0,-5.0,1.0,6.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
160 | 2022-12-02 21:01:10 UTC,Canada,F,71.80854,1.96276,0.74782,0.0,0.0,3.0,-5.0,2.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
161 | 2022-12-02 21:01:10 UTC,Qatar,A,48.19173,1.36459,1.23216,0.0,0.0,3.0,-6.0,1.0,7.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
162 | 2022-11-28 20:59:50 UTC,Brazil,G,93.48139,3.0621,0.23656,2.81289,0.15059,0.03652,4.94744,5.26053,0.31309,0.99515,0.00485,0.0,0.0,1.0,0.82256,0.53731,0.39419,0.26002,2022-12-18 17:56:44 UTC
163 | 2022-11-28 20:59:50 UTC,Spain,E,90.62031,2.84092,0.33577,1.61371,1.24833,0.13796,8.04799,9.76438,1.71639,0.84893,0.14284,0.00823,0.0,0.99177,0.72213,0.35169,0.23196,0.13658,2022-12-18 17:56:44 UTC
164 | 2022-11-28 20:59:50 UTC,France,D,90.1491,3.03006,0.45553,2.6489,0.23851,0.11259,5.1854,7.78972,2.60432,0.99992,8.0e-05,0.0,0.0,1.0,0.75998,0.47603,0.27224,0.13269,2022-12-18 17:56:44 UTC
165 | 2022-11-28 20:59:50 UTC,Portugal,H,87.55187,2.81564,0.51015,2.58556,0.24741,0.16703,3.94343,6.80943,2.866,0.98834,0.01166,0.0,0.0,1.0,0.65092,0.35302,0.18387,0.08195,2022-12-18 17:56:44 UTC
166 | 2022-11-28 20:59:50 UTC,Argentina,C,86.02625,2.48839,0.42171,1.57821,0.26472,1.15707,1.89454,4.61122,2.71668,0.5729,0.20115,0.22498,0.00097,0.77405,0.49381,0.29805,0.12681,0.06528,2022-12-18 17:56:44 UTC
167 | 2022-11-28 20:59:50 UTC,England,B,85.40758,2.54769,0.48612,1.60056,1.25646,0.14298,4.9891,7.69141,2.70231,0.82096,0.1782,0.00084,0.0,0.99916,0.5983,0.29438,0.14332,0.06282,2022-12-18 17:56:44 UTC
168 | 2022-11-28 20:59:50 UTC,Germany,E,88.86004,3.15327,0.60378,0.80585,1.1424,1.05175,1.01357,4.51484,3.50127,0.0,0.67345,0.1324,0.19415,0.67345,0.42428,0.24106,0.12928,0.05919,2022-12-18 17:56:44 UTC
169 | 2022-11-28 20:59:50 UTC,Netherlands,A,84.3837,2.59307,0.56564,1.77578,1.15339,0.07083,3.89088,5.55187,1.66099,0.75673,0.23478,0.00849,0.0,0.99151,0.59733,0.32199,0.12204,0.05723,2022-12-18 17:56:44 UTC
170 | 2022-11-28 20:59:50 UTC,Croatia,F,80.87388,2.30506,0.57143,1.38931,1.28598,0.32471,3.13406,5.36639,2.23233,0.54603,0.21259,0.24138,0.0,0.75862,0.31783,0.13829,0.06419,0.0254,2022-12-18 17:56:44 UTC
171 | 2022-11-28 20:59:50 UTC,Ecuador,A,75.81562,1.93859,0.56118,1.36865,1.33448,0.29687,2.13904,4.04594,1.9069,0.17704,0.5322,0.29076,0.0,0.70924,0.3161,0.12525,0.04497,0.01607,2022-12-18 17:56:44 UTC
172 | 2022-11-28 20:59:50 UTC,Denmark,D,77.67855,2.14044,0.61433,0.5222,1.27795,1.19985,-0.31798,2.53289,2.85087,0.0,0.51286,0.35534,0.1318,0.51286,0.2412,0.11817,0.03423,0.01409,2022-12-18 17:56:44 UTC
173 | 2022-11-28 20:59:50 UTC,Switzerland,G,77.00154,2.0892,0.61069,1.39764,0.291,1.31136,0.18218,2.34865,2.16647,0.00485,0.67384,0.30992,0.01139,0.67869,0.24187,0.09924,0.03875,0.01281,2022-12-18 17:56:44 UTC
174 | 2022-11-28 20:59:50 UTC,Morocco,F,74.98677,1.90939,0.57595,1.39518,1.31463,0.29019,2.20617,3.19518,0.98901,0.25817,0.65551,0.08632,0.0,0.91368,0.2796,0.08569,0.03619,0.01278,2022-12-18 17:56:44 UTC
175 | 2022-11-28 20:59:50 UTC,Uruguay,H,79.28334,2.08567,0.50822,0.56285,1.27989,1.15726,-1.15685,1.53457,2.69142,0.0,0.48823,0.25995,0.25182,0.48823,0.12173,0.05184,0.02802,0.01254,2022-12-18 17:56:44 UTC
176 | 2022-11-28 20:59:50 UTC,Belgium,F,79.43852,2.39434,0.69623,1.32471,0.28598,1.38931,-1.13406,2.23233,3.36639,0.1958,0.1319,0.60422,0.06808,0.3277,0.12889,0.05167,0.02323,0.00953,2022-12-18 17:56:44 UTC
177 | 2022-11-28 20:59:50 UTC,Poland,C,68.95006,1.84231,0.77859,1.15707,1.26472,0.57821,1.10546,2.71668,1.61122,0.36082,0.39437,0.24481,0.0,0.75519,0.24598,0.08961,0.02053,0.00643,2022-12-18 17:56:44 UTC
178 | 2022-11-28 20:59:50 UTC,Iran,B,69.25599,1.78397,0.72133,1.30798,0.3153,1.37672,-2.13273,5.03097,7.1637,0.12374,0.45502,0.3669,0.05434,0.57876,0.20294,0.07616,0.01877,0.00602,2022-12-18 17:56:44 UTC
179 | 2022-11-28 20:59:50 UTC,USA,B,72.55486,1.91623,0.68239,0.37672,2.3153,0.30798,0.13273,2.1637,2.03097,0.05495,0.32177,0.51549,0.10779,0.37672,0.14541,0.06135,0.01639,0.00562,2022-12-18 17:56:44 UTC
180 | 2022-11-28 20:59:50 UTC,Senegal,A,73.00354,1.88325,0.64005,1.29687,0.33448,1.36865,-0.13904,3.9069,4.04594,0.06623,0.23302,0.69809,0.00266,0.29925,0.12513,0.04647,0.0165,0.00545,2022-12-18 17:56:44 UTC
181 | 2022-11-28 20:59:50 UTC,Japan,E,73.67885,1.98526,0.68384,1.13796,0.24833,1.61371,-1.04799,2.71639,3.76438,0.13796,0.05747,0.80451,6.0e-05,0.19543,0.09698,0.02898,0.01258,0.00487,2022-12-18 17:56:44 UTC
182 | 2022-11-28 20:59:50 UTC,Serbia,G,74.7218,2.19758,0.78677,0.31136,1.291,1.39764,-2.18218,4.16647,6.34865,0.0,0.30418,0.37027,0.32555,0.30418,0.10171,0.03952,0.01503,0.00462,2022-12-18 17:56:44 UTC
183 | 2022-11-28 20:59:50 UTC,Mexico,C,72.44435,1.79005,0.59636,0.46291,1.30803,1.22906,-1.53731,1.31152,2.84883,0.0,0.164,0.29891,0.53709,0.164,0.04521,0.01911,0.00693,0.00223,2022-12-18 17:56:44 UTC
184 | 2022-11-28 20:59:50 UTC,Australia,D,62.44587,1.61996,0.86734,1.19985,0.27795,1.5222,-2.68202,2.85087,5.53289,8.0e-05,0.44607,0.4949,0.05895,0.44615,0.13214,0.0406,0.00626,0.00177,2022-12-18 17:56:44 UTC
185 | 2022-11-28 20:59:50 UTC,Saudi Arabia,C,62.01155,1.65981,0.91933,1.22906,0.30803,1.46291,-1.46269,2.84883,4.31152,0.06628,0.24048,0.2313,0.46194,0.30676,0.06571,0.02028,0.00412,0.0011,2022-12-18 17:56:44 UTC
186 | 2022-11-28 20:59:50 UTC,South Korea,H,70.34955,1.84149,0.71967,0.16703,1.24741,1.58556,-1.94343,2.866,4.80943,0.0,0.08912,0.25671,0.65417,0.08912,0.01607,0.00556,0.00247,0.00101,2022-12-18 17:56:44 UTC
187 | 2022-11-28 20:59:50 UTC,Ghana,H,60.50179,1.59883,0.92909,1.15726,0.27989,1.56285,-0.84315,5.69142,6.53457,0.01166,0.41099,0.48334,0.09401,0.42265,0.04063,0.0092,0.00281,0.00065,2022-12-18 17:56:44 UTC
188 | 2022-11-28 20:59:50 UTC,Tunisia,D,65.92204,1.54964,0.67071,0.11259,1.23851,1.6489,-2.1854,0.60432,2.78972,0.0,0.04099,0.14976,0.80925,0.04099,0.01597,0.00665,0.00158,0.0005,2022-12-18 17:56:44 UTC
189 | 2022-11-28 20:59:50 UTC,Wales,B,65.1679,1.6696,0.79776,0.14298,1.25646,1.60056,-2.9891,1.70231,4.69141,0.00035,0.04501,0.11677,0.83787,0.04536,0.01479,0.0059,0.00128,0.0004,2022-12-18 17:56:44 UTC
190 | 2022-11-28 20:59:50 UTC,Costa Rica,E,52.89792,1.27862,0.94276,1.05175,0.1424,1.80585,-8.01357,1.50127,9.51484,0.01311,0.12624,0.05486,0.80579,0.13935,0.03029,0.00548,0.00108,0.0002,2022-12-18 17:56:44 UTC
191 | 2022-11-28 20:59:50 UTC,Cameroon,G,64.47548,1.69585,0.84762,0.03652,1.15059,1.81289,-2.94744,3.31309,6.26053,0.0,0.01713,0.31981,0.66306,0.01713,0.00451,0.00145,0.00038,0.00015,2022-12-18 17:56:44 UTC
192 | 2022-11-28 20:59:50 UTC,Canada,F,71.52045,1.97761,0.7711,0.29019,0.31463,2.39518,-4.20617,1.98901,6.19518,0.0,0.0,0.06808,0.93192,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
193 | 2022-11-28 20:59:50 UTC,Qatar,A,48.45657,1.43718,1.29612,0.07083,0.15339,2.77578,-5.89088,1.66099,7.55187,0.0,0.0,0.00266,0.99734,0.0,0.0,0.0,0.0,0.0,2022-12-18 17:56:44 UTC
194 | 2022-11-24 20:56:17 UTC,Brazil,G,93.65727,3.15479,0.26042,2.4447,0.39723,0.15807,5.06266,6.02952,0.96686,0.85231,0.13118,0.01552,0.00099,0.98349,0.76231,0.50478,0.36793,0.2476,2022-12-18 17:56:44 UTC
195 | 2022-11-24 20:56:17 UTC,Spain,E,91.2188,2.95544,0.34936,2.08913,0.49144,0.41943,8.54154,10.60562,2.06408,0.7482,0.1539,0.09711,0.00079,0.9021,0.6638,0.35123,0.23944,0.14587,2022-12-18 17:56:44 UTC
196 | 2022-11-24 20:56:17 UTC,France,D,89.25241,2.94006,0.46965,2.13886,0.51836,0.34278,4.74748,7.34515,2.59767,0.76912,0.16078,0.06439,0.00571,0.9299,0.65888,0.40349,0.22312,0.11092,2022-12-18 17:56:44 UTC
197 | 2022-11-24 20:56:17 UTC,Netherlands,A,86.07414,2.75552,0.56358,2.21615,0.45423,0.32962,4.22665,6.03928,1.81263,0.71232,0.23706,0.04561,0.00501,0.94938,0.60133,0.35679,0.14615,0.07245,2022-12-18 17:56:44 UTC
198 | 2022-11-24 20:56:17 UTC,Portugal,H,87.30309,2.80698,0.52026,2.00726,0.55613,0.43661,2.23243,6.03842,3.80599,0.66745,0.20871,0.11212,0.01172,0.87616,0.49172,0.28365,0.15419,0.07188,2022-12-18 17:56:44 UTC
199 | 2022-11-24 20:56:17 UTC,England,B,86.26103,2.70131,0.52347,2.13353,0.51206,0.35441,5.72536,9.44639,3.72103,0.78495,0.14815,0.05782,0.00908,0.9331,0.58574,0.30624,0.15614,0.07118,2022-12-18 17:56:44 UTC
200 | 2022-11-24 20:56:17 UTC,Argentina,C,86.09354,2.57779,0.466,1.08527,0.55644,1.35829,0.54682,4.08952,3.5427,0.23508,0.30558,0.22864,0.2307,0.54066,0.31108,0.18949,0.09295,0.04724,2022-12-18 17:56:44 UTC
201 | 2022-11-24 20:56:17 UTC,Germany,E,88.72557,3.21022,0.6427,1.08993,0.39472,1.51535,0.70256,4.96288,4.26032,0.03546,0.29247,0.58851,0.08356,0.32793,0.21221,0.12057,0.06744,0.03269,2022-12-18 17:56:44 UTC
202 | 2022-11-24 20:56:17 UTC,Belgium,F,80.53709,2.52178,0.72241,1.77229,0.56993,0.65778,1.24981,3.74306,2.49325,0.54059,0.23882,0.17162,0.04897,0.77941,0.34298,0.1418,0.06427,0.02415,2022-12-18 17:56:44 UTC
203 | 2022-11-24 20:56:17 UTC,Denmark,D,78.86992,2.17826,0.5851,0.76562,1.54234,0.69204,0.15956,2.56467,2.40511,0.15307,0.41237,0.29935,0.13521,0.56544,0.32475,0.15557,0.05583,0.0229,2022-12-18 17:56:44 UTC
204 | 2022-11-24 20:56:17 UTC,Uruguay,H,79.70107,2.11082,0.5055,0.82117,1.58766,0.59117,0.45966,2.43158,1.97192,0.20312,0.36372,0.29819,0.13497,0.56684,0.21465,0.10274,0.05081,0.02099,2022-12-18 17:56:44 UTC
205 | 2022-11-24 20:56:17 UTC,Croatia,F,78.46106,2.16026,0.59205,0.75833,1.58667,0.655,0.21102,2.5944,2.38338,0.22433,0.2918,0.27318,0.21069,0.51613,0.2113,0.08519,0.04148,0.01684,2022-12-18 17:56:44 UTC
206 | 2022-11-24 20:56:17 UTC,Switzerland,G,77.52036,2.16944,0.64044,1.50987,0.53487,0.95526,0.00949,2.95887,2.94938,0.13199,0.53827,0.30243,0.02731,0.67026,0.27479,0.11839,0.04922,0.01659,2022-12-18 17:56:44 UTC
207 | 2022-11-24 20:56:17 UTC,Ecuador,A,74.37289,1.934,0.61854,1.57339,0.61012,0.81649,1.47661,3.97477,2.49816,0.25698,0.47998,0.25169,0.01135,0.73696,0.3151,0.13165,0.0449,0.01584,2022-12-18 17:56:44 UTC
208 | 2022-11-24 20:56:17 UTC,Japan,E,71.98065,2.03674,0.79447,1.73706,0.48563,0.77731,0.84473,4.48901,3.64428,0.21516,0.53097,0.2469,0.00697,0.74613,0.31862,0.10747,0.04304,0.01433,2022-12-18 17:56:44 UTC
209 | 2022-11-24 20:56:17 UTC,Morocco,F,74.6733,1.96111,0.62462,0.66524,1.6009,0.73386,-0.154,2.31627,2.47027,0.17695,0.26903,0.29998,0.25404,0.44598,0.1596,0.05628,0.02472,0.00904,2022-12-18 17:56:44 UTC
210 | 2022-11-24 20:56:17 UTC,Mexico,C,73.47596,1.89685,0.63005,0.66514,1.59635,0.73851,-0.15316,2.14794,2.3011,0.2019,0.22454,0.30673,0.26683,0.42644,0.17268,0.07517,0.02449,0.00897,2022-12-18 17:56:44 UTC
211 | 2022-11-24 20:56:17 UTC,USA,B,72.62673,2.00526,0.74344,0.60104,1.559,0.83996,-0.5522,3.21355,3.76575,0.11257,0.33627,0.33529,0.21587,0.44884,0.17274,0.07378,0.02176,0.00809,2022-12-18 17:56:44 UTC
212 | 2022-11-24 20:56:17 UTC,Serbia,G,74.55183,2.10043,0.72657,0.77051,0.59446,1.63503,-1.72837,2.5109,4.23927,0.01129,0.28561,0.39815,0.30495,0.2969,0.11168,0.04855,0.02049,0.00672,2022-12-18 17:56:44 UTC
213 | 2022-11-24 20:56:17 UTC,Senegal,A,73.22583,1.8886,0.63462,0.85635,0.5945,1.54915,-1.31886,2.63664,3.9555,0.02322,0.24269,0.48286,0.25123,0.26591,0.10595,0.04184,0.01634,0.00581,2022-12-18 17:56:44 UTC
214 | 2022-11-24 20:56:17 UTC,South Korea,H,66.43505,1.66252,0.74092,0.61698,1.58058,0.80244,-0.46737,2.02442,2.49179,0.11503,0.27161,0.36974,0.24362,0.38664,0.10383,0.03815,0.01531,0.00483,2022-12-18 17:56:44 UTC
215 | 2022-11-24 20:56:17 UTC,Poland,C,68.14371,1.79246,0.77364,0.56516,1.56449,0.87035,-0.68039,2.03074,2.71113,0.15536,0.19699,0.2907,0.35695,0.35235,0.12171,0.04645,0.0131,0.00452,2022-12-18 17:56:44 UTC
216 | 2022-11-24 20:56:17 UTC,Wales,B,67.63678,1.74862,0.76031,0.50869,1.57058,0.92073,-0.91418,2.89141,3.80559,0.08373,0.28544,0.36121,0.26962,0.36917,0.12593,0.04936,0.01302,0.00435,2022-12-18 17:56:44 UTC
217 | 2022-11-24 20:56:17 UTC,Tunisia,D,66.4768,1.6014,0.69051,0.51099,1.56864,0.92037,-0.93527,1.77984,2.71511,0.06737,0.26656,0.39983,0.26624,0.33393,0.14805,0.05239,0.01326,0.00432,2022-12-18 17:56:44 UTC
218 | 2022-11-24 20:56:17 UTC,Canada,F,73.84345,2.02414,0.70416,0.61657,0.61764,1.76579,-1.30683,2.11059,3.41742,0.05813,0.20035,0.25522,0.4863,0.25848,0.08643,0.02833,0.01199,0.00427,2022-12-18 17:56:44 UTC
219 | 2022-11-24 20:56:17 UTC,Saudi Arabia,C,59.01259,1.57188,0.96706,1.52359,0.6044,0.87201,0.28673,3.92271,3.63598,0.40766,0.27289,0.17393,0.14552,0.68055,0.19361,0.05947,0.01128,0.00288,2022-12-18 17:56:44 UTC
220 | 2022-11-24 20:56:17 UTC,Iran,B,63.32507,1.64128,0.84941,0.62716,0.61752,1.75532,-4.25898,4.12495,8.38393,0.01875,0.23014,0.24568,0.50543,0.24889,0.08052,0.03273,0.00781,0.0022,2022-12-18 17:56:44 UTC
221 | 2022-11-24 20:56:17 UTC,Australia,D,58.64544,1.5739,0.98422,0.47355,0.59262,1.93383,-3.97177,2.77507,6.74684,0.01044,0.16029,0.23643,0.59284,0.17073,0.06924,0.02226,0.00441,0.00117,2022-12-18 17:56:44 UTC
222 | 2022-11-24 20:56:17 UTC,Cameroon,G,63.62287,1.59463,0.79825,0.28323,0.45682,2.25995,-3.34378,1.24726,4.59104,0.00441,0.04494,0.2839,0.66675,0.04935,0.01582,0.00554,0.0021,0.00061,2022-12-18 17:56:44 UTC
223 | 2022-11-24 20:56:17 UTC,Ghana,H,60.03229,1.50523,0.8658,0.38635,0.61211,2.00154,-2.22472,3.42529,5.65001,0.0144,0.15596,0.21995,0.60969,0.17036,0.0252,0.00636,0.00206,0.0005,2022-12-18 17:56:44 UTC
224 | 2022-11-24 20:56:17 UTC,Qatar,A,48.16112,1.42811,1.30017,0.30538,0.43861,2.25601,-4.3844,1.79336,6.17776,0.00748,0.04027,0.21984,0.73241,0.04775,0.01269,0.00332,0.00077,0.00023,2022-12-18 17:56:44 UTC
225 | 2022-11-24 20:56:17 UTC,Costa Rica,E,51.99243,1.32127,1.02265,0.20353,0.38891,2.40756,-10.08883,1.29898,11.38781,0.00118,0.02266,0.06748,0.90868,0.02384,0.00506,0.00097,0.00018,2.0e-05,2022-12-18 17:56:44 UTC
226 | 2022-11-16 16:00:55 UTC,Brazil,G,93.54699,3.22213,0.29634,2.11474,0.59456,0.2907,4.46304,6.30163,1.83859,0.71639,0.19406,0.06846,0.02109,0.91045,0.68867,0.46381,0.32477,0.21668,2022-12-18 17:56:44 UTC
227 | 2022-11-16 16:00:55 UTC,Spain,E,89.50604,2.80203,0.38627,1.76309,0.69769,0.53922,2.88009,5.46797,2.58788,0.4684,0.33846,0.15418,0.03896,0.80686,0.55576,0.30279,0.18857,0.10663,2022-12-18 17:56:44 UTC
228 | 2022-11-16 16:00:55 UTC,France,D,87.70516,2.77362,0.47923,1.78422,0.73505,0.48073,2.96537,5.30739,2.34202,0.55358,0.27328,0.12328,0.04986,0.82686,0.54053,0.33135,0.17187,0.0875,2022-12-18 17:56:44 UTC
229 | 2022-11-16 16:00:55 UTC,Argentina,C,87.20776,2.62755,0.4317,1.83671,0.73199,0.4313,3.16936,5.33484,2.16548,0.59722,0.24273,0.11295,0.0471,0.83995,0.53091,0.32755,0.15944,0.08476,2022-12-18 17:56:44 UTC
230 | 2022-11-16 16:00:55 UTC,Portugal,H,87.77456,2.78861,0.48293,1.74211,0.74742,0.51047,2.80761,5.18913,2.38152,0.53461,0.27626,0.13468,0.05445,0.81087,0.45583,0.26028,0.15248,0.07629,2022-12-18 17:56:44 UTC
231 | 2022-11-16 16:00:55 UTC,Germany,E,88.7737,3.17168,0.61922,1.65986,0.65542,0.68472,2.55211,5.8586,3.30649,0.40333,0.36091,0.18128,0.05448,0.76424,0.49584,0.24828,0.14385,0.07425,2022-12-18 17:56:44 UTC
232 | 2022-11-16 16:00:55 UTC,England,B,85.95712,2.553,0.45994,1.71265,0.79415,0.4932,2.62876,4.87722,2.24846,0.55445,0.24981,0.12986,0.06588,0.80426,0.51608,0.28996,0.14689,0.07136,2022-12-18 17:56:44 UTC
233 | 2022-11-16 16:00:55 UTC,Netherlands,A,86.01102,2.79647,0.58975,1.73222,0.71039,0.55739,2.89991,5.86382,2.96391,0.53223,0.25783,0.14552,0.06442,0.79006,0.4899,0.2666,0.11908,0.0596,2022-12-18 17:56:44 UTC
234 | 2022-11-16 16:00:55 UTC,Denmark,D,80.01595,2.2889,0.60196,1.31537,0.83937,0.84526,0.99315,4.09363,3.10048,0.29056,0.35779,0.22531,0.12634,0.64835,0.33253,0.16865,0.06883,0.02842,2022-12-18 17:56:44 UTC
235 | 2022-11-16 16:00:55 UTC,Uruguay,H,80.90448,2.25529,0.53963,1.32689,0.86229,0.81082,1.06659,3.96556,2.89897,0.29815,0.35459,0.22909,0.11817,0.65274,0.28244,0.13261,0.06615,0.02828,2022-12-18 17:56:44 UTC
236 | 2022-11-16 16:00:55 UTC,Belgium,F,82.49005,2.62457,0.6845,1.32798,0.8056,0.86642,1.04043,4.71514,3.67471,0.35643,0.26757,0.21261,0.16339,0.624,0.27365,0.12034,0.06141,0.02608,2022-12-18 17:56:44 UTC
237 | 2022-11-16 16:00:55 UTC,Croatia,F,78.84025,2.28577,0.65525,1.15695,0.84997,0.99308,0.32548,4.07091,3.74543,0.27547,0.26872,0.2432,0.21261,0.54419,0.21411,0.08819,0.04219,0.01702,2022-12-18 17:56:44 UTC
238 | 2022-11-16 16:00:55 UTC,Switzerland,G,77.64665,2.23118,0.67527,1.01246,0.79286,1.19468,-0.49222,3.61276,4.10498,0.13455,0.34406,0.30746,0.21393,0.47861,0.20741,0.0888,0.03948,0.01455,2022-12-18 17:56:44 UTC
239 | 2022-11-16 16:00:55 UTC,USA,B,74.83489,2.11382,0.7233,1.08538,0.87897,1.03565,0.07698,3.58459,3.50761,0.2214,0.30813,0.26353,0.20694,0.52953,0.24297,0.10082,0.03517,0.01304,2022-12-18 17:56:44 UTC
240 | 2022-11-16 16:00:55 UTC,Mexico,C,74.29647,2.00635,0.67211,1.10911,0.86111,1.02978,0.15824,3.62095,3.46271,0.20717,0.32919,0.27301,0.19063,0.53636,0.22207,0.09943,0.03394,0.01268,2022-12-18 17:56:44 UTC
241 | 2022-11-16 16:00:55 UTC,Senegal,A,73.8414,1.94597,0.64928,1.10327,0.84656,1.05017,0.13989,3.84251,3.70262,0.20957,0.30172,0.29356,0.19515,0.51129,0.23152,0.09563,0.03294,0.01199,2022-12-18 17:56:44 UTC
242 | 2022-11-16 16:00:55 UTC,Ecuador,A,72.74127,1.95582,0.70294,1.06051,0.83314,1.10635,-0.08847,3.80594,3.89441,0.19014,0.29195,0.30458,0.21333,0.48209,0.20916,0.08389,0.02817,0.01022,2022-12-18 17:56:44 UTC
243 | 2022-11-16 16:00:55 UTC,Morocco,F,75.62263,2.10023,0.67896,1.00739,0.86128,1.13133,-0.27965,3.68217,3.96182,0.21422,0.25051,0.26928,0.26599,0.46473,0.16532,0.06159,0.02701,0.01021,2022-12-18 17:56:44 UTC
244 | 2022-11-16 16:00:55 UTC,Serbia,G,75.83904,2.21814,0.74974,0.91609,0.77856,1.30535,-0.98479,3.4681,4.45289,0.10954,0.30341,0.33362,0.25343,0.41295,0.16587,0.06658,0.02878,0.01,2022-12-18 17:56:44 UTC
245 | 2022-11-16 16:00:55 UTC,Japan,E,71.43695,1.98575,0.78071,0.9156,0.76006,1.32434,-1.03341,3.51877,4.55218,0.11084,0.23408,0.43682,0.21826,0.34492,0.1576,0.05775,0.02465,0.00876,2022-12-18 17:56:44 UTC
246 | 2022-11-16 16:00:55 UTC,Canada,F,71.58583,1.94737,0.74608,0.82211,0.85429,1.3236,-1.08626,3.26725,4.35351,0.15388,0.2132,0.27491,0.35801,0.36708,0.11482,0.03869,0.01591,0.0055,2022-12-18 17:56:44 UTC
247 | 2022-11-16 16:00:55 UTC,Poland,C,68.28098,1.87603,0.83283,0.84879,0.83305,1.31816,-1.06316,3.14758,4.21074,0.12588,0.25332,0.31968,0.30112,0.3792,0.12938,0.05029,0.01471,0.00463,2022-12-18 17:56:44 UTC
248 | 2022-11-16 16:00:55 UTC,South Korea,H,66.12313,1.73414,0.81094,0.82649,0.85594,1.31757,-1.13309,2.91359,4.04668,0.12062,0.23574,0.35148,0.29216,0.35636,0.10596,0.03783,0.01429,0.00449,2022-12-18 17:56:44 UTC
249 | 2022-11-16 16:00:55 UTC,Tunisia,D,65.85461,1.63339,0.74077,0.73256,0.86585,1.40159,-1.46599,2.62304,4.08903,0.09675,0.21187,0.34901,0.34237,0.30862,0.11045,0.04178,0.01166,0.00382,2022-12-18 17:56:44 UTC
250 | 2022-11-16 16:00:55 UTC,Iran,B,62.17412,1.51146,0.78563,0.75007,0.9078,1.34213,-1.23015,2.62104,3.85119,0.1152,0.22687,0.3076,0.35033,0.34207,0.12694,0.04371,0.01241,0.00365,2022-12-18 17:56:44 UTC
251 | 2022-11-16 16:00:55 UTC,Wales,B,65.58314,1.7128,0.81593,0.72363,0.87562,1.40075,-1.47559,2.67891,4.1545,0.10895,0.21519,0.29901,0.37685,0.32414,0.11755,0.03968,0.01153,0.00345,2022-12-18 17:56:44 UTC
252 | 2022-11-16 16:00:55 UTC,Cameroon,G,64.15924,1.65744,0.82883,0.5109,0.72564,1.76346,-2.98603,2.30607,5.2921,0.03952,0.15847,0.29046,0.51155,0.19799,0.05796,0.01791,0.00597,0.00167,2022-12-18 17:56:44 UTC
253 | 2022-11-16 16:00:55 UTC,Saudi Arabia,C,56.86592,1.50018,0.99118,0.59721,0.79021,1.61258,-2.26444,2.55321,4.81765,0.06973,0.17476,0.29436,0.46115,0.24449,0.06913,0.02164,0.00516,0.00132,2022-12-18 17:56:44 UTC
254 | 2022-11-16 16:00:55 UTC,Australia,D,60.83178,1.59388,0.91112,0.55148,0.79247,1.65605,-2.49253,2.36908,4.86161,0.05911,0.15706,0.3024,0.48143,0.21617,0.065,0.02062,0.00454,0.00124,2022-12-18 17:56:44 UTC
255 | 2022-11-16 16:00:55 UTC,Qatar,A,51.00223,1.57111,1.31642,0.56555,0.68681,1.74764,-2.95133,3.11894,6.07027,0.06806,0.1485,0.25634,0.5271,0.21656,0.06588,0.0184,0.00399,0.00096,2022-12-18 17:56:44 UTC
256 | 2022-11-16 16:00:55 UTC,Ghana,H,58.62702,1.43347,0.85806,0.4673,0.80877,1.72393,-2.74111,1.99867,4.73978,0.04662,0.13341,0.28475,0.53522,0.18003,0.03586,0.00945,0.00284,0.00063,2022-12-18 17:56:44 UTC
257 | 2022-11-16 16:00:55 UTC,Costa Rica,E,55.45518,1.39816,0.95388,0.29847,0.61279,2.08874,-4.39879,1.8086,6.20739,0.01743,0.06655,0.22772,0.6883,0.08398,0.0229,0.0051,0.00132,0.00032,2022-12-18 17:56:44 UTC
258 |
--------------------------------------------------------------------------------
/python-to-c++/py/world-cup-2022/wc_matches.csv:
--------------------------------------------------------------------------------
1 | date,league_id,league,team1,team2,spi1,spi2,prob1,prob2,probtie,proj_score1,proj_score2,score1,score2,xg1,xg2,nsxg1,nsxg2,adj_score1,adj_score2
2 | 2022-11-20,1908,FIFA World Cup,Qatar,Ecuador,51.0,72.74,0.2369,0.5045,0.2586,1.13,1.75,0,2,0.23,1.14,0.24,1.35,0.0,2.1
3 | 2022-11-21,1908,FIFA World Cup,England,Iran,85.96,62.17,0.6274,0.1187,0.2539,1.7,0.58,6,2,1.04,1.45,1.5,0.32,5.78,2.1
4 | 2022-11-21,1908,FIFA World Cup,Senegal,Netherlands,73.84,86.01,0.2235,0.5053,0.2712,0.99,1.63,0,2,0.7,0.68,1.22,1.83,0.0,1.58
5 | 2022-11-21,1908,FIFA World Cup,USA,Wales,74.83,65.58,0.4489,0.2591,0.292,1.42,1.01,1,1,0.33,1.78,0.48,0.95,1.05,1.05
6 | 2022-11-22,1908,FIFA World Cup,Argentina,Saudi Arabia,87.21,56.87,0.7228,0.0807,0.1966,2.11,0.54,1,2,1.63,0.15,2.4,0.53,1.05,2.1
7 | 2022-11-22,1908,FIFA World Cup,Denmark,Tunisia,80.02,65.85,0.5001,0.2054,0.2945,1.44,0.82,0,0,0.66,1.16,1.33,0.69,0.0,0.0
8 | 2022-11-22,1908,FIFA World Cup,Mexico,Poland,74.3,68.28,0.4238,0.2802,0.296,1.37,1.06,0,0,0.45,1.02,1.19,0.49,0.0,0.0
9 | 2022-11-22,1908,FIFA World Cup,France,Australia,87.71,60.83,0.6921,0.1009,0.207,2.09,0.65,4,1,3.03,0.26,3.01,0.3,4.18,1.05
10 | 2022-11-23,1908,FIFA World Cup,Morocco,Croatia,75.62,78.84,0.3176,0.3898,0.2926,1.18,1.34,0,0,0.28,0.88,0.54,0.64,0.0,0.0
11 | 2022-11-23,1908,FIFA World Cup,Germany,Japan,88.77,71.44,0.6041,0.174,0.2219,2.14,1.06,1,2,3.1,1.2,3.1,0.85,1.05,2.1
12 | 2022-11-23,1908,FIFA World Cup,Spain,Costa Rica,89.51,55.46,0.7623,0.0595,0.1781,2.19,0.44,7,0,2.39,0.0,1.71,0.15,6.22,0.0
13 | 2022-11-23,1908,FIFA World Cup,Belgium,Canada,82.49,71.59,0.4888,0.2462,0.265,1.68,1.12,1,0,0.65,2.6,1.18,2.31,1.05,0.0
14 | 2022-11-24,1908,FIFA World Cup,Switzerland,Cameroon,77.65,64.16,0.4991,0.2186,0.2823,1.53,0.92,1,0,1.0,0.61,1.16,0.9,1.05,0.0
15 | 2022-11-24,1908,FIFA World Cup,Uruguay,South Korea,80.9,66.12,0.5256,0.1906,0.2838,1.52,0.8,0,0,0.48,0.4,0.89,0.74,0.0,0.0
16 | 2022-11-24,1908,FIFA World Cup,Portugal,Ghana,87.77,58.63,0.6974,0.0912,0.2114,2.0,0.56,3,2,1.89,0.52,1.63,0.27,2.9,2.1
17 | 2022-11-24,1908,FIFA World Cup,Brazil,Serbia,93.55,75.84,0.6787,0.1124,0.2089,2.11,0.72,2,0,1.48,0.18,1.4,0.36,2.02,0.0
18 | 2022-11-25,1908,FIFA World Cup,Wales,Iran,67.64,63.33,0.3875,0.2969,0.3156,1.2,1.01,0,2,0.9,1.43,0.89,1.67,0.0,1.26
19 | 2022-11-25,1908,FIFA World Cup,Qatar,Senegal,48.16,73.23,0.2098,0.5228,0.2674,0.96,1.66,1,3,0.94,0.75,1.06,1.28,1.05,2.81
20 | 2022-11-25,1908,FIFA World Cup,Netherlands,Ecuador,86.07,74.37,0.4949,0.2248,0.2803,1.55,0.95,1,1,0.07,0.8,0.43,1.09,1.05,1.05
21 | 2022-11-25,1908,FIFA World Cup,England,USA,86.26,72.63,0.5436,0.1965,0.2598,1.73,0.94,0,0,0.62,0.52,1.34,0.74,0.0,0.0
22 | 2022-11-26,1908,FIFA World Cup,Tunisia,Australia,66.48,58.65,0.3883,0.2894,0.3223,1.16,0.96,0,1,0.89,0.5,1.3,0.65,0.0,1.05
23 | 2022-11-26,1908,FIFA World Cup,Poland,Saudi Arabia,68.14,59.01,0.4061,0.2911,0.3029,1.3,1.05,2,0,1.73,2.17,1.6,1.16,1.8,0.0
24 | 2022-11-26,1908,FIFA World Cup,France,Denmark,89.25,78.87,0.5064,0.2192,0.2744,1.6,0.96,2,1,2.06,0.5,2.3,0.7,2.1,1.05
25 | 2022-11-26,1908,FIFA World Cup,Argentina,Mexico,86.09,73.48,0.5079,0.1993,0.2928,1.45,0.8,2,0,0.26,0.18,0.72,0.45,1.66,0.0
26 | 2022-11-27,1908,FIFA World Cup,Japan,Costa Rica,71.98,51.99,0.5955,0.1498,0.2547,1.74,0.74,0,1,0.7,0.14,1.15,0.09,0.0,1.05
27 | 2022-11-27,1908,FIFA World Cup,Belgium,Morocco,80.54,74.67,0.407,0.3057,0.2873,1.41,1.18,0,2,0.88,0.48,0.91,0.42,0.0,1.58
28 | 2022-11-27,1908,FIFA World Cup,Croatia,Canada,78.46,73.84,0.4069,0.2893,0.3037,1.29,1.05,4,1,1.56,0.37,1.6,0.85,3.68,1.05
29 | 2022-11-27,1908,FIFA World Cup,Spain,Germany,91.22,88.73,0.4619,0.2781,0.26,1.72,1.28,1,1,0.57,0.91,1.32,1.06,1.05,1.05
30 | 2022-11-28,1908,FIFA World Cup,Cameroon,Serbia,63.62,74.55,0.2444,0.4575,0.2981,0.94,1.39,3,3,0.91,1.2,0.85,1.95,3.15,3.15
31 | 2022-11-28,1908,FIFA World Cup,South Korea,Ghana,66.44,60.03,0.443,0.2348,0.3222,1.23,0.81,2,3,1.56,0.51,2.31,0.73,2.1,3.15
32 | 2022-11-28,1908,FIFA World Cup,Brazil,Switzerland,93.66,77.52,0.6427,0.1202,0.2372,1.84,0.65,1,0,1.46,0.27,1.23,0.61,1.05,0.0
33 | 2022-11-28,1908,FIFA World Cup,Portugal,Uruguay,87.3,79.7,0.4392,0.2628,0.298,1.37,1.0,2,0,1.42,1.18,1.28,1.36,1.58,0.0
34 | 2022-11-29,1908,FIFA World Cup,Netherlands,Qatar,84.38,48.46,0.7768,0.0696,0.1536,2.6,0.65,2,0,1.36,0.19,1.06,0.45,2.1,0.0
35 | 2022-11-29,1908,FIFA World Cup,Ecuador,Senegal,75.82,73.0,0.3668,0.2961,0.3371,1.06,0.92,1,2,0.61,1.73,0.77,1.14,1.05,2.1
36 | 2022-11-29,1908,FIFA World Cup,Iran,USA,65.77,72.55,0.3082,0.3764,0.3154,1.04,1.18,0,1,0.75,0.92,1.1,1.17,0.0,1.05
37 | 2022-11-29,1908,FIFA World Cup,Wales,England,65.17,85.41,0.1437,0.6,0.2564,0.7,1.72,0,3,0.28,1.8,0.32,1.93,0.0,3.15
38 | 2022-11-30,1908,FIFA World Cup,Tunisia,France,65.92,90.15,0.1116,0.651,0.2374,0.6,1.82,1,0,0.29,0.43,0.61,1.21,1.05,0.0
39 | 2022-11-30,1908,FIFA World Cup,Australia,Denmark,58.8,77.68,0.1985,0.522,0.2795,0.85,1.56,1,0,0.47,0.62,0.4,1.75,1.05,0.0
40 | 2022-11-30,1908,FIFA World Cup,Poland,Argentina,68.95,86.03,0.1547,0.5784,0.2669,0.71,1.64,0,2,0.24,3.28,0.32,2.24,0.0,2.1
41 | 2022-11-30,1908,FIFA World Cup,Saudi Arabia,Mexico,58.41,72.44,0.2307,0.4627,0.3066,0.86,1.34,1,2,0.62,1.81,0.71,2.27,1.05,2.1
42 | 2022-12-01,1908,FIFA World Cup,Canada,Morocco,71.52,74.99,0.2898,0.3956,0.3147,0.99,1.21,1,2,0.98,0.37,0.68,0.24,1.05,2.1
43 | 2022-12-01,1908,FIFA World Cup,Croatia,Belgium,80.87,79.44,0.3881,0.3253,0.2866,1.38,1.24,0,0,0.63,2.62,1.44,1.92,0.0,0.0
44 | 2022-12-01,1908,FIFA World Cup,Costa Rica,Germany,52.9,88.86,0.0512,0.8045,0.1442,0.5,2.55,2,4,1.27,4.41,0.33,5.9,2.1,3.72
45 | 2022-12-01,1908,FIFA World Cup,Japan,Spain,70.43,90.62,0.1391,0.6135,0.2474,0.71,1.79,2,1,0.53,0.79,0.81,1.1,2.1,1.05
46 | 2022-12-02,1908,FIFA World Cup,Ghana,Uruguay,60.5,79.28,0.1564,0.5669,0.2766,0.68,1.57,0,2,1.35,1.12,0.73,1.44,0.0,2.1
47 | 2022-12-02,1908,FIFA World Cup,South Korea,Portugal,66.93,87.55,0.1666,0.5866,0.2468,0.86,1.84,2,1,0.85,0.9,0.72,0.64,2.1,1.05
48 | 2022-12-02,1908,FIFA World Cup,Serbia,Switzerland,74.72,77.0,0.3126,0.3965,0.2909,1.18,1.36,2,3,0.64,2.42,1.47,1.28,2.1,3.15
49 | 2022-12-02,1908,FIFA World Cup,Cameroon,Brazil,64.48,93.48,0.0363,0.8112,0.1524,0.31,2.29,1,0,0.38,2.75,0.81,2.99,1.05,0.0
50 | 2022-12-03,1908,FIFA World Cup,Netherlands,USA,83.97,73.07,0.6551,0.3449,0.0,1.42,0.88,3,1,1.16,1.43,1.4,1.08,2.87,1.05
51 | 2022-12-03,1908,FIFA World Cup,Argentina,Australia,87.98,59.35,0.8261,0.1739,0.0,1.85,0.57,2,1,1.27,0.32,1.32,0.92,2.1,1.05
52 | 2022-12-04,1908,FIFA World Cup,France,Poland,88.57,65.77,0.8133,0.1867,0.0,1.99,0.71,3,1,1.17,1.91,1.54,0.85,2.52,1.05
53 | 2022-12-04,1908,FIFA World Cup,England,Senegal,86.97,75.47,0.6814,0.3186,0.0,1.47,0.83,3,0,0.87,1.09,0.97,0.62,3.15,0.0
54 | 2022-12-05,1908,FIFA World Cup,Japan,Croatia,73.02,79.14,0.454,0.546,0.0,1.1,1.27,1,1,1.55,1.43,0.94,1.61,1.05,1.05
55 | 2022-12-05,1908,FIFA World Cup,Brazil,South Korea,92.9,69.4,0.8261,0.1739,0.0,1.89,0.58,4,1,2.96,0.67,1.56,0.69,4.2,1.05
56 | 2022-12-06,1908,FIFA World Cup,Morocco,Spain,74.42,89.2,0.2711,0.7289,0.0,0.65,1.44,0,0,0.69,1.01,0.67,1.58,0.0,0.0
57 | 2022-12-06,1908,FIFA World Cup,Portugal,Switzerland,85.8,78.51,0.6158,0.3842,0.0,1.51,1.08,6,1,1.34,0.98,1.42,0.7,5.78,1.05
58 | 2022-12-09,1908,FIFA World Cup,Croatia,Brazil,78.99,93.47,0.2264,0.7736,0.0,0.68,1.72,1,1,0.62,1.9,1.1,2.74,1.05,1.05
59 | 2022-12-09,1908,FIFA World Cup,Netherlands,Argentina,84.19,87.32,0.4238,0.5762,0.0,1.04,1.31,2,2,0.43,1.52,1.29,1.79,2.1,2.03
60 | 2022-12-10,1908,FIFA World Cup,Morocco,Portugal,74.45,87.92,0.3185,0.6815,0.0,0.83,1.46,1,0,0.57,1.11,0.67,1.32,1.05,0.0
61 | 2022-12-10,1908,FIFA World Cup,England,France,87.59,87.53,0.516,0.484,0.0,1.29,1.23,1,2,2.42,0.97,1.4,1.53,1.05,2.1
62 | 2022-12-13,1908,FIFA World Cup,Argentina,Croatia,87.46,79.37,0.6426,0.3574,0.0,1.33,0.84,3,0,1.69,0.53,1.3,1.16,3.15,0.0
63 | 2022-12-14,1908,FIFA World Cup,France,Morocco,87.72,75.13,0.6646,0.3354,0.0,1.38,0.82,2,0,1.4,0.79,1.43,0.7,1.87,0.0
64 | 2022-12-17,1908,FIFA World Cup,Croatia,Morocco,77.65,73.92,0.5325,0.4675,0.0,0.97,0.88,2,1,0.76,0.96,1.52,0.73,2.1,1.05
65 | 2022-12-18,1908,FIFA World Cup,Argentina,France,88.86,88.41,0.5321,0.4679,0.0,1.3,1.18,3,3,2.81,2.25,2.36,0.76,3.15,3.15
66 |
--------------------------------------------------------------------------------
/raw-model-fails-to-find-memory-bug/README.md:
--------------------------------------------------------------------------------
1 | ## Raw model fails to find memory bug
2 |
3 | Scenario: You want to find memory bugs in your C++ code. Here, `utils.cc` is our correct code, and in `utils-bug.cc` we have introduced a bug on line 38 where we make the for loop do one iteration too many.
4 |
5 | #### Steps
6 |
7 | 1. Prompt GPT-4 with the `utils-bug.cc` file and ask it if there are any memory problems.
8 | 2. It fails to find it!
9 | 3. If we ask about the specific line, it is able to find it.
10 |
11 | GPT-4 is not the be-all and end-all of coding tools. You need to combine its powers with traditional tools — address sanitizers, static analyzers, and more.
12 |
13 | #### Screenshots
14 |
15 | 
--------------------------------------------------------------------------------
/raw-model-fails-to-find-memory-bug/memory-bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/raw-model-fails-to-find-memory-bug/memory-bug.png
--------------------------------------------------------------------------------
/raw-model-fails-to-find-memory-bug/utils-bug.cc:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2022 Anysphere, Inc.
3 | // SPDX-License-Identifier: MIT
4 | //
5 |
6 | #include "utils.hpp"
7 |
8 | #include
9 |
10 | using std::bitset;
11 | using std::to_integer;
12 |
13 | using std::cout;
14 | using std::endl;
15 | using std::min;
16 |
17 | auto get_submatrix_as_uint64s(vector& db, size_t db_row_length_in_bits,
18 | size_t subm_top_left_corner_in_bits,
19 | const size_t subm_row_length_in_bits,
20 | size_t subm_rows) -> vector {
21 | vector subm;
22 | subm.reserve(subm_rows);
23 | assert(subm_row_length_in_bits == 18 && "unsupported submatrix size");
24 |
25 | // add 4 padding bytes to the db
26 | for (size_t i = 0; i < 4; i++) {
27 | db.push_back(byte(0));
28 | }
29 |
30 | const auto db_rows = db.size() / (db_row_length_in_bits / 8);
31 | const auto subm_start_row =
32 | subm_top_left_corner_in_bits / db_row_length_in_bits;
33 | const auto subm_end_row = subm_start_row + subm_rows;
34 |
35 | const auto iterable_db_rows = min(db_rows, subm_end_row) - subm_start_row;
36 | const auto paddinging_rows = subm_rows - iterable_db_rows;
37 |
38 | for (size_t i = 0; i < iterable_db_rows + 1; i++) {
39 | const size_t db_row_index =
40 | subm_top_left_corner_in_bits / 8 + i * db_row_length_in_bits / 8;
41 | const int db_row_offset_in_bits = subm_top_left_corner_in_bits % 8;
42 | const size_t subm_row_length_in_bytes = subm_row_length_in_bits / 8 + 1;
43 |
44 | const auto db_row = db.begin() + db_row_index;
45 |
46 | bitset<64> subm_row = 0;
47 |
48 | auto first_row = bitset<8>(db_row[0]) << db_row_offset_in_bits;
49 | first_row >>= db_row_offset_in_bits;
50 |
51 | subm_row |= bitset<64>(first_row.to_ullong());
52 | for (size_t j = 1; j < subm_row_length_in_bytes; j++) {
53 | const auto db_byte_as_int = bitset<64>(db_row[j]);
54 | subm_row <<= 8;
55 | subm_row |= db_byte_as_int;
56 | }
57 | // bits consumed by the first byte = 8 - db_row_offset_in_bits
58 | // bits consumed by shifting = 8 * (subm_row_length_in_bytes - 1)
59 | // bits_we_want_left = subm_row_length_in_bits
60 | // So we shift by (bits_consumed - bits_we_want_left)
61 | subm_row >>= ((8 - db_row_offset_in_bits) +
62 | 8 * (subm_row_length_in_bytes - 1) - subm_row_length_in_bits);
63 |
64 | subm.push_back(subm_row.to_ullong());
65 | }
66 |
67 | for (size_t i = 0; i < paddinging_rows; i++) {
68 | subm.push_back(0);
69 | }
70 |
71 | // remove the padding byte
72 | for (size_t i = 0; i < 4; i++) {
73 | db.pop_back();
74 | }
75 |
76 | return subm;
77 | }
--------------------------------------------------------------------------------
/raw-model-fails-to-find-memory-bug/utils.cc:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2022 Anysphere, Inc.
3 | // SPDX-License-Identifier: MIT
4 | //
5 |
6 | #include "utils.hpp"
7 |
8 | #include
9 |
10 | using std::bitset;
11 | using std::to_integer;
12 |
13 | using std::cout;
14 | using std::endl;
15 | using std::min;
16 |
17 | auto get_submatrix_as_uint64s(vector& db, size_t db_row_length_in_bits,
18 | size_t subm_top_left_corner_in_bits,
19 | const size_t subm_row_length_in_bits,
20 | size_t subm_rows) -> vector {
21 | vector subm;
22 | subm.reserve(subm_rows);
23 | assert(subm_row_length_in_bits == 18 && "unsupported submatrix size");
24 |
25 | // add 4 padding bytes to the db
26 | for (size_t i = 0; i < 4; i++) {
27 | db.push_back(byte(0));
28 | }
29 |
30 | const auto db_rows = db.size() / (db_row_length_in_bits / 8);
31 | const auto subm_start_row =
32 | subm_top_left_corner_in_bits / db_row_length_in_bits;
33 | const auto subm_end_row = subm_start_row + subm_rows;
34 |
35 | const auto iterable_db_rows = min(db_rows, subm_end_row) - subm_start_row;
36 | const auto paddinging_rows = subm_rows - iterable_db_rows;
37 |
38 | for (size_t i = 0; i < iterable_db_rows; i++) {
39 | const size_t db_row_index =
40 | subm_top_left_corner_in_bits / 8 + i * db_row_length_in_bits / 8;
41 | const int db_row_offset_in_bits = subm_top_left_corner_in_bits % 8;
42 | const size_t subm_row_length_in_bytes = subm_row_length_in_bits / 8 + 1;
43 |
44 | const auto db_row = db.begin() + db_row_index;
45 |
46 | bitset<64> subm_row = 0;
47 |
48 | auto first_row = bitset<8>(db_row[0]) << db_row_offset_in_bits;
49 | first_row >>= db_row_offset_in_bits;
50 |
51 | subm_row |= bitset<64>(first_row.to_ullong());
52 | for (size_t j = 1; j < subm_row_length_in_bytes; j++) {
53 | const auto db_byte_as_int = bitset<64>(db_row[j]);
54 | subm_row <<= 8;
55 | subm_row |= db_byte_as_int;
56 | }
57 | // bits consumed by the first byte = 8 - db_row_offset_in_bits
58 | // bits consumed by shifting = 8 * (subm_row_length_in_bytes - 1)
59 | // bits_we_want_left = subm_row_length_in_bits
60 | // So we shift by (bits_consumed - bits_we_want_left)
61 | subm_row >>= ((8 - db_row_offset_in_bits) +
62 | 8 * (subm_row_length_in_bytes - 1) - subm_row_length_in_bits);
63 |
64 | subm.push_back(subm_row.to_ullong());
65 | }
66 |
67 | for (size_t i = 0; i < paddinging_rows; i++) {
68 | subm.push_back(0);
69 | }
70 |
71 | // remove the padding byte
72 | for (size_t i = 0; i < 4; i++) {
73 | db.pop_back();
74 | }
75 |
76 | return subm;
77 | }
--------------------------------------------------------------------------------
/raw-model-fails-to-find-memory-bug/utils.hpp:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2022 Anysphere, Inc.
3 | // SPDX-License-Identifier: MIT
4 | //
5 |
6 | #pragma once
7 |
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 |
15 | // extract a submatrix from a matrix db, where each row in the submatrix is a
16 | // uint64_t
17 | //
18 | // db is a row-major stored matrix with db_row_length_in_bits bits per row.
19 | // subm_top_left_corner_in_bits represent the index of the top left corner of
20 | // the submatrix, in bits. subm_row_length_in_bits is the number of bits in each
21 | // row of the submatrix. subm_cols is the number of columns in the submatrix.
22 | //
23 | // note: if subm_top_left_corner_in_bits + subm_row_length_in_bits goes past the
24 | // right edge of the matrix, we DONT want to wrap around, but instead pretend
25 | // that the db matrix is padded to the right with 0s.
26 | //
27 | // precondition: db.size() is a multiple of row_length_in_bits/8
28 | //
29 | //
30 |
31 | #include
32 | #include
33 |
34 | using byte = unsigned char;
35 |
36 | using std::bitset;
37 | using std::vector;
38 |
39 | auto get_submatrix_as_uint64s(vector& db, size_t db_row_length_in_bits,
40 | size_t subm_top_left_corner_in_bits,
41 | size_t subm_row_length_in_bits, size_t subm_rows)
42 | -> vector;
43 |
44 | template
45 | auto concat_N_lsb_bits(const vector& v) -> vector {
46 | bitset<8 * N> bits;
47 | vector result;
48 |
49 | for (size_t i = 0; i < v.size(); i += 8) {
50 | bits = 0;
51 | for (size_t j = 0; j < 8; j++) {
52 | if (i + j >= v.size()) {
53 | break;
54 | }
55 | auto extract_N_bits = v[i + j] & ((1 << N) - 1);
56 | bits <<= N;
57 | bits |= extract_N_bits;
58 | }
59 | vector semi_result;
60 | for (size_t j = 0; j < N; j++) {
61 | // get 8 bits from the j-th bit to the j+3-th bit
62 | bitset<8 * N> mask = 0;
63 | mask = (1 << 8) - 1;
64 | mask <<= (j * 8);
65 | auto extract_bits = (bits & mask) >> (j * 8);
66 | byte b = static_cast(extract_bits.to_ulong());
67 | semi_result.push_back(b);
68 | }
69 | std::reverse(semi_result.begin(), semi_result.end());
70 | result.insert(result.end(), semi_result.begin(), semi_result.end());
71 | }
72 |
73 | size_t output_size = v.size() * N / 8;
74 | assert(output_size <= result.size());
75 | for (size_t i = 0; i < result.size() - output_size; i++) {
76 | result.pop_back();
77 | }
78 |
79 | return result;
80 | }
--------------------------------------------------------------------------------
/rocksb-cli/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 |
--------------------------------------------------------------------------------
/rocksb-cli/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "adler"
7 | version = "1.0.2"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
10 |
11 | [[package]]
12 | name = "atty"
13 | version = "0.2.14"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
16 | dependencies = [
17 | "hermit-abi",
18 | "libc",
19 | "winapi",
20 | ]
21 |
22 | [[package]]
23 | name = "autocfg"
24 | version = "1.1.0"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
27 |
28 | [[package]]
29 | name = "bindgen"
30 | version = "0.64.0"
31 | source = "registry+https://github.com/rust-lang/crates.io-index"
32 | checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
33 | dependencies = [
34 | "bitflags",
35 | "cexpr",
36 | "clang-sys",
37 | "lazy_static",
38 | "lazycell",
39 | "peeking_take_while",
40 | "proc-macro2",
41 | "quote",
42 | "regex",
43 | "rustc-hash",
44 | "shlex",
45 | "syn",
46 | ]
47 |
48 | [[package]]
49 | name = "bitflags"
50 | version = "1.3.2"
51 | source = "registry+https://github.com/rust-lang/crates.io-index"
52 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
53 |
54 | [[package]]
55 | name = "bzip2-sys"
56 | version = "0.1.11+1.0.8"
57 | source = "registry+https://github.com/rust-lang/crates.io-index"
58 | checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
59 | dependencies = [
60 | "cc",
61 | "libc",
62 | "pkg-config",
63 | ]
64 |
65 | [[package]]
66 | name = "cc"
67 | version = "1.0.79"
68 | source = "registry+https://github.com/rust-lang/crates.io-index"
69 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
70 | dependencies = [
71 | "jobserver",
72 | ]
73 |
74 | [[package]]
75 | name = "cexpr"
76 | version = "0.6.0"
77 | source = "registry+https://github.com/rust-lang/crates.io-index"
78 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
79 | dependencies = [
80 | "nom",
81 | ]
82 |
83 | [[package]]
84 | name = "cfg-if"
85 | version = "1.0.0"
86 | source = "registry+https://github.com/rust-lang/crates.io-index"
87 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
88 |
89 | [[package]]
90 | name = "clang-sys"
91 | version = "1.6.0"
92 | source = "registry+https://github.com/rust-lang/crates.io-index"
93 | checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
94 | dependencies = [
95 | "glob",
96 | "libc",
97 | "libloading",
98 | ]
99 |
100 | [[package]]
101 | name = "clap"
102 | version = "3.2.23"
103 | source = "registry+https://github.com/rust-lang/crates.io-index"
104 | checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
105 | dependencies = [
106 | "atty",
107 | "bitflags",
108 | "clap_lex",
109 | "indexmap",
110 | "strsim",
111 | "termcolor",
112 | "textwrap",
113 | ]
114 |
115 | [[package]]
116 | name = "clap_lex"
117 | version = "0.2.4"
118 | source = "registry+https://github.com/rust-lang/crates.io-index"
119 | checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
120 | dependencies = [
121 | "os_str_bytes",
122 | ]
123 |
124 | [[package]]
125 | name = "crc32fast"
126 | version = "1.3.2"
127 | source = "registry+https://github.com/rust-lang/crates.io-index"
128 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
129 | dependencies = [
130 | "cfg-if",
131 | ]
132 |
133 | [[package]]
134 | name = "flate2"
135 | version = "1.0.25"
136 | source = "registry+https://github.com/rust-lang/crates.io-index"
137 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
138 | dependencies = [
139 | "crc32fast",
140 | "miniz_oxide",
141 | ]
142 |
143 | [[package]]
144 | name = "glob"
145 | version = "0.3.1"
146 | source = "registry+https://github.com/rust-lang/crates.io-index"
147 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
148 |
149 | [[package]]
150 | name = "hashbrown"
151 | version = "0.12.3"
152 | source = "registry+https://github.com/rust-lang/crates.io-index"
153 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
154 |
155 | [[package]]
156 | name = "hermit-abi"
157 | version = "0.1.19"
158 | source = "registry+https://github.com/rust-lang/crates.io-index"
159 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
160 | dependencies = [
161 | "libc",
162 | ]
163 |
164 | [[package]]
165 | name = "indexmap"
166 | version = "1.9.2"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
169 | dependencies = [
170 | "autocfg",
171 | "hashbrown",
172 | ]
173 |
174 | [[package]]
175 | name = "jobserver"
176 | version = "0.1.26"
177 | source = "registry+https://github.com/rust-lang/crates.io-index"
178 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
179 | dependencies = [
180 | "libc",
181 | ]
182 |
183 | [[package]]
184 | name = "lazy_static"
185 | version = "1.4.0"
186 | source = "registry+https://github.com/rust-lang/crates.io-index"
187 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
188 |
189 | [[package]]
190 | name = "lazycell"
191 | version = "1.3.0"
192 | source = "registry+https://github.com/rust-lang/crates.io-index"
193 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
194 |
195 | [[package]]
196 | name = "libc"
197 | version = "0.2.140"
198 | source = "registry+https://github.com/rust-lang/crates.io-index"
199 | checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
200 |
201 | [[package]]
202 | name = "libloading"
203 | version = "0.7.4"
204 | source = "registry+https://github.com/rust-lang/crates.io-index"
205 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
206 | dependencies = [
207 | "cfg-if",
208 | "winapi",
209 | ]
210 |
211 | [[package]]
212 | name = "librocksdb-sys"
213 | version = "0.8.3+7.4.4"
214 | source = "registry+https://github.com/rust-lang/crates.io-index"
215 | checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3"
216 | dependencies = [
217 | "bindgen",
218 | "bzip2-sys",
219 | "cc",
220 | "glob",
221 | "libc",
222 | "libz-sys",
223 | "zstd-sys",
224 | ]
225 |
226 | [[package]]
227 | name = "libz-sys"
228 | version = "1.1.8"
229 | source = "registry+https://github.com/rust-lang/crates.io-index"
230 | checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
231 | dependencies = [
232 | "cc",
233 | "pkg-config",
234 | "vcpkg",
235 | ]
236 |
237 | [[package]]
238 | name = "memchr"
239 | version = "2.5.0"
240 | source = "registry+https://github.com/rust-lang/crates.io-index"
241 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
242 |
243 | [[package]]
244 | name = "minimal-lexical"
245 | version = "0.2.1"
246 | source = "registry+https://github.com/rust-lang/crates.io-index"
247 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
248 |
249 | [[package]]
250 | name = "miniz_oxide"
251 | version = "0.6.2"
252 | source = "registry+https://github.com/rust-lang/crates.io-index"
253 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
254 | dependencies = [
255 | "adler",
256 | ]
257 |
258 | [[package]]
259 | name = "nom"
260 | version = "7.1.3"
261 | source = "registry+https://github.com/rust-lang/crates.io-index"
262 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
263 | dependencies = [
264 | "memchr",
265 | "minimal-lexical",
266 | ]
267 |
268 | [[package]]
269 | name = "os_str_bytes"
270 | version = "6.4.1"
271 | source = "registry+https://github.com/rust-lang/crates.io-index"
272 | checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
273 |
274 | [[package]]
275 | name = "peeking_take_while"
276 | version = "0.1.2"
277 | source = "registry+https://github.com/rust-lang/crates.io-index"
278 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
279 |
280 | [[package]]
281 | name = "pkg-config"
282 | version = "0.3.26"
283 | source = "registry+https://github.com/rust-lang/crates.io-index"
284 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
285 |
286 | [[package]]
287 | name = "proc-macro2"
288 | version = "1.0.52"
289 | source = "registry+https://github.com/rust-lang/crates.io-index"
290 | checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
291 | dependencies = [
292 | "unicode-ident",
293 | ]
294 |
295 | [[package]]
296 | name = "quote"
297 | version = "1.0.26"
298 | source = "registry+https://github.com/rust-lang/crates.io-index"
299 | checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
300 | dependencies = [
301 | "proc-macro2",
302 | ]
303 |
304 | [[package]]
305 | name = "regex"
306 | version = "1.7.1"
307 | source = "registry+https://github.com/rust-lang/crates.io-index"
308 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
309 | dependencies = [
310 | "regex-syntax",
311 | ]
312 |
313 | [[package]]
314 | name = "regex-syntax"
315 | version = "0.6.28"
316 | source = "registry+https://github.com/rust-lang/crates.io-index"
317 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
318 |
319 | [[package]]
320 | name = "rocksdb"
321 | version = "0.19.0"
322 | source = "registry+https://github.com/rust-lang/crates.io-index"
323 | checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc"
324 | dependencies = [
325 | "libc",
326 | "librocksdb-sys",
327 | ]
328 |
329 | [[package]]
330 | name = "rocksdb-cli"
331 | version = "0.1.0"
332 | dependencies = [
333 | "clap",
334 | "flate2",
335 | "rocksdb",
336 | "serde",
337 | ]
338 |
339 | [[package]]
340 | name = "rustc-hash"
341 | version = "1.1.0"
342 | source = "registry+https://github.com/rust-lang/crates.io-index"
343 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
344 |
345 | [[package]]
346 | name = "serde"
347 | version = "1.0.156"
348 | source = "registry+https://github.com/rust-lang/crates.io-index"
349 | checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
350 | dependencies = [
351 | "serde_derive",
352 | ]
353 |
354 | [[package]]
355 | name = "serde_derive"
356 | version = "1.0.156"
357 | source = "registry+https://github.com/rust-lang/crates.io-index"
358 | checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d"
359 | dependencies = [
360 | "proc-macro2",
361 | "quote",
362 | "syn",
363 | ]
364 |
365 | [[package]]
366 | name = "shlex"
367 | version = "1.1.0"
368 | source = "registry+https://github.com/rust-lang/crates.io-index"
369 | checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
370 |
371 | [[package]]
372 | name = "strsim"
373 | version = "0.10.0"
374 | source = "registry+https://github.com/rust-lang/crates.io-index"
375 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
376 |
377 | [[package]]
378 | name = "syn"
379 | version = "1.0.109"
380 | source = "registry+https://github.com/rust-lang/crates.io-index"
381 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
382 | dependencies = [
383 | "proc-macro2",
384 | "quote",
385 | "unicode-ident",
386 | ]
387 |
388 | [[package]]
389 | name = "termcolor"
390 | version = "1.2.0"
391 | source = "registry+https://github.com/rust-lang/crates.io-index"
392 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
393 | dependencies = [
394 | "winapi-util",
395 | ]
396 |
397 | [[package]]
398 | name = "textwrap"
399 | version = "0.16.0"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
402 |
403 | [[package]]
404 | name = "unicode-ident"
405 | version = "1.0.8"
406 | source = "registry+https://github.com/rust-lang/crates.io-index"
407 | checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
408 |
409 | [[package]]
410 | name = "vcpkg"
411 | version = "0.2.15"
412 | source = "registry+https://github.com/rust-lang/crates.io-index"
413 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
414 |
415 | [[package]]
416 | name = "winapi"
417 | version = "0.3.9"
418 | source = "registry+https://github.com/rust-lang/crates.io-index"
419 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
420 | dependencies = [
421 | "winapi-i686-pc-windows-gnu",
422 | "winapi-x86_64-pc-windows-gnu",
423 | ]
424 |
425 | [[package]]
426 | name = "winapi-i686-pc-windows-gnu"
427 | version = "0.4.0"
428 | source = "registry+https://github.com/rust-lang/crates.io-index"
429 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
430 |
431 | [[package]]
432 | name = "winapi-util"
433 | version = "0.1.5"
434 | source = "registry+https://github.com/rust-lang/crates.io-index"
435 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
436 | dependencies = [
437 | "winapi",
438 | ]
439 |
440 | [[package]]
441 | name = "winapi-x86_64-pc-windows-gnu"
442 | version = "0.4.0"
443 | source = "registry+https://github.com/rust-lang/crates.io-index"
444 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
445 |
446 | [[package]]
447 | name = "zstd-sys"
448 | version = "2.0.7+zstd.1.5.4"
449 | source = "registry+https://github.com/rust-lang/crates.io-index"
450 | checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
451 | dependencies = [
452 | "cc",
453 | "libc",
454 | "pkg-config",
455 | ]
456 |
--------------------------------------------------------------------------------
/rocksb-cli/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rocksdb-cli"
3 | version = "0.1.0"
4 | edition = "2018"
5 |
6 | [dependencies]
7 | rocksdb = "0.19.0"
8 | clap = "3.0.0-beta.5"
9 | flate2 = "1.0"
10 | serde = { version = "1.0.150", features = ["derive"] }
--------------------------------------------------------------------------------
/rocksb-cli/README.md:
--------------------------------------------------------------------------------
1 | # Creating a CLI instantly
2 |
3 | Scenario: You have a RocksDB database, and you want to generate a CLI for it.
4 |
5 | #### Steps
6 |
7 | 1. Prompt GPT-4 with the `spec.txt` and "Can you implement this in Rust".
8 | 2. Generate the Cargo.toml.
9 | 3. Fix a bug by giving GPT-4 the error message.
10 | 4. You have a CLI.
11 |
12 | #### Screenshots
13 |
14 | Initial prompt:
15 |
16 | 
17 |
18 | Generating the Cargo.toml:
19 |
20 | 
21 |
22 | Fixing the last bug:
23 |
24 | 
--------------------------------------------------------------------------------
/rocksb-cli/bug-fix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/rocksb-cli/bug-fix.png
--------------------------------------------------------------------------------
/rocksb-cli/bug-fix.txt:
--------------------------------------------------------------------------------
1 | ```
2 | error[E0308]: mismatched types
3 | --> src/main.rs:58:13
4 | |
5 | 58 | for (key, _) in iter {
6 | | ^^^^^^^^ ---- this is an iterator with items of type `Result<(Box<[u8]>, Box<[u8]>), rocksdb::Error>`
7 | | |
8 | | expected enum `Result`, found tuple
9 | |
10 | = note: expected enum `Result<(Box<[u8]>, Box<[u8]>), rocksdb::Error>`
11 | found tuple `(_, _)`
12 |
13 | error[E0308]: mismatched types
14 | --> src/main.rs:67:24
15 | |
16 | 67 | while let Some((key, value)) = iter.next() {
17 | | ^^^^^^^^^^^^ ----------- this expression has type `Option, Box<[u8]>), rocksdb::Error>>`
18 | | |
19 | | expected enum `Result`, found tuple
20 | |
21 | = note: expected enum `Result<(Box<[u8]>, Box<[u8]>), rocksdb::Error>`
22 | found tuple `(_, _)`
23 |
24 | warning: unused import: `std::io::Read`
25 | --> src/main.rs:3:5
26 | |
27 | 3 | use std::io::Read;
28 | | ^^^^^^^^^^^^^
29 | |
30 | = note: `#[warn(unused_imports)]` on by default
31 | ```
32 |
33 |
34 | please fix the following errors
--------------------------------------------------------------------------------
/rocksb-cli/cargo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/rocksb-cli/cargo.png
--------------------------------------------------------------------------------
/rocksb-cli/cli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anysphere/gpt-4-for-code/44a2b9718117b7c35646ed67d6493db2c1a38019/rocksb-cli/cli.png
--------------------------------------------------------------------------------
/rocksb-cli/spec.txt:
--------------------------------------------------------------------------------
1 | Create a CLI with the following features:
2 |
3 | 1. The following commands:
4 | - get: Get the value of a key from the database.
5 | - delete: Delete a key from the database.
6 | - list: List all the keys in the database.
7 | - list+decompress: List a specified number of keys in the database, with optional jump parameter, and decompress the values using flate2.
8 |
9 | 2. The CLI takes in the path of the RocksDB to open. It should optionally ask if the database should be created if it doesnt exist.
10 |
--------------------------------------------------------------------------------
/rocksb-cli/src/main.rs:
--------------------------------------------------------------------------------
1 | use rocksdb::{Options, DB};
2 | use flate2::read::GzDecoder;
3 | use std::io::Read;
4 | use clap::{Arg, App, SubCommand};
5 |
6 | fn main() {
7 | let matches = App::new("RocksDB CLI")
8 | .arg(Arg::with_name("path")
9 | .help("Path to the RocksDB")
10 | .required(true)
11 | .index(1))
12 | .subcommand(SubCommand::with_name("get")
13 | .about("Get the value of a key from the database")
14 | .arg(Arg::with_name("key")
15 | .help("Key to get the value for")
16 | .required(true)
17 | .index(1)))
18 | .subcommand(SubCommand::with_name("delete")
19 | .about("Delete a key from the database")
20 | .arg(Arg::with_name("key")
21 | .help("Key to delete")
22 | .required(true)
23 | .index(1)))
24 | .subcommand(SubCommand::with_name("list")
25 | .about("List all the keys in the database"))
26 | .subcommand(SubCommand::with_name("list+decompress")
27 | .about("List a specified number of keys in the database, with optional jump parameter, and decompress the values using flate2")
28 | .arg(Arg::with_name("count")
29 | .help("Number of keys to list")
30 | .required(true)
31 | .index(1))
32 | .arg(Arg::with_name("jump")
33 | .help("Optional jump parameter")
34 | .required(false)
35 | .index(2)))
36 | .get_matches();
37 |
38 | let path = matches.value_of("path").unwrap();
39 | let mut options = Options::default();
40 | options.create_if_missing(true);
41 | let db = DB::open(&options, path).unwrap();
42 |
43 | if let Some(matches) = matches.subcommand_matches("get") {
44 | let key = matches.value_of("key").unwrap();
45 | match db.get(key.as_bytes()) {
46 | Ok(Some(value)) => println!("Value: {:?}", String::from_utf8(value).unwrap()),
47 | Ok(None) => println!("Key not found"),
48 | Err(e) => println!("Error: {}", e),
49 | }
50 | } else if let Some(matches) = matches.subcommand_matches("delete") {
51 | let key = matches.value_of("key").unwrap();
52 | match db.delete(key.as_bytes()) {
53 | Ok(_) => println!("Key deleted"),
54 | Err(e) => println!("Error: {}", e),
55 | }
56 | } else if let Some(_) = matches.subcommand_matches("list") {
57 | let iter = db.iterator(rocksdb::IteratorMode::Start);
58 | for item in iter {
59 | match item {
60 | Ok((key, _)) => println!("Key: {:?}", String::from_utf8(key.to_vec()).unwrap()),
61 | Err(e) => println!("Error: {}", e),
62 | }
63 | }
64 | } else if let Some(matches) = matches.subcommand_matches("list+decompress") {
65 | let count = matches.value_of("count").unwrap().parse::().unwrap();
66 | let jump = matches.value_of("jump").unwrap_or("1").parse::().unwrap();
67 | let mut iter = db.iterator(rocksdb::IteratorMode::Start);
68 | let mut counter = 0;
69 |
70 | while let Some(item) = iter.next() {
71 | match item {
72 | Ok((key, value)) => {
73 | if counter % jump == 0 {
74 | let mut d = GzDecoder::new(&value[..]);
75 | let mut decompressed = String::new();
76 | d.read_to_string(&mut decompressed).unwrap();
77 | println!("Key: {:?}, Value: {:?}", String::from_utf8(key.to_vec()).unwrap(), decompressed);
78 | }
79 |
80 | counter += 1;
81 | if counter >= count {
82 | break;
83 | }
84 | }
85 | Err(e) => println!("Error: {}", e),
86 | }
87 | }
88 | }
89 | }
--------------------------------------------------------------------------------