├── .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 | ![](initial-prompt.png) 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 | ![](website.png) 24 | 25 | The generated website (0-shot, first try): 26 | 27 | ![](rendered-website.png) -------------------------------------------------------------------------------- /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 | 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 | 46 | 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 | ![](jit.png) -------------------------------------------------------------------------------- /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 | ![](deployment.png) -------------------------------------------------------------------------------- /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 | ![Prompt: "what should i add here to support the group_by_column_and_filter method in my c++ code too"](full-generation-prompt.png) 17 | 18 | Explaining parts: 19 | 20 | ![Prompt: "whoa. can you give more detail on the predefined_column_filters translation, including the python code you copied from"](explain-the-binds.png) -------------------------------------------------------------------------------- /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 | ![](memory-bug.png) -------------------------------------------------------------------------------- /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 | ![](cli.png) 17 | 18 | Generating the Cargo.toml: 19 | 20 | ![](cargo.png) 21 | 22 | Fixing the last bug: 23 | 24 | ![](bug-fix.png) -------------------------------------------------------------------------------- /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 | } --------------------------------------------------------------------------------