davidpomerenke commited on
Commit
6f0e312
Β·
verified Β·
1 Parent(s): 3018273

Upload from GitHub Actions: improve norwegian fix

Browse files
evals/countries.py CHANGED
@@ -26,7 +26,7 @@ def make_country_table(language_table):
26
  "name": lang.language_name,
27
  "bcp_47": lang.bcp_47,
28
  "population": speaker_pop,
29
- "score": lang.average if not pd.isna(lang.average) else 0,
30
  }
31
  )
32
  for country, languages in countries.items():
@@ -36,7 +36,7 @@ def make_country_table(language_table):
36
  score = None # This will make them appear grey on the map
37
  else:
38
  score = (
39
- sum(entry["score"] * entry["population"] for entry in languages)
40
  / speaker_pop
41
  )
42
 
 
26
  "name": lang.language_name,
27
  "bcp_47": lang.bcp_47,
28
  "population": speaker_pop,
29
+ "score": lang.average if not pd.isna(lang.average) else None,
30
  }
31
  )
32
  for country, languages in countries.items():
 
36
  score = None # This will make them appear grey on the map
37
  else:
38
  score = (
39
+ sum((entry["score"] or 0) * entry["population"] for entry in languages)
40
  / speaker_pop
41
  )
42
 
evals/datasets_/commonvoice.py CHANGED
@@ -2,8 +2,8 @@ import re
2
  from datetime import date
3
 
4
  import pandas as pd
 
5
  from joblib.memory import Memory
6
- from langcodes import standardize_tag
7
  from requests import get
8
 
9
  cache = Memory(location=".cache", verbose=0).cache
@@ -23,8 +23,8 @@ commonvoice["bcp_47"] = commonvoice["commonvoice_locale"].apply(
23
  lambda x: re.sub(r"-[A-Z]{2}$", "", x)
24
  )
25
  commonvoice["bcp_47"] = commonvoice["bcp_47"].apply(
26
- lambda x: standardize_tag(x, macro=True)
27
- ) # this does not really seem to get macrolanguages though, e.g. not for Quechua
28
  commonvoice = (
29
  commonvoice.groupby("bcp_47")
30
  .agg({"commonvoice_hours": "sum", "commonvoice_locale": "first"})
 
2
  from datetime import date
3
 
4
  import pandas as pd
5
+ from datasets_.util import standardize_bcp47
6
  from joblib.memory import Memory
 
7
  from requests import get
8
 
9
  cache = Memory(location=".cache", verbose=0).cache
 
23
  lambda x: re.sub(r"-[A-Z]{2}$", "", x)
24
  )
25
  commonvoice["bcp_47"] = commonvoice["bcp_47"].apply(
26
+ lambda x: standardize_bcp47(x, macro=True)
27
+ )
28
  commonvoice = (
29
  commonvoice.groupby("bcp_47")
30
  .agg({"commonvoice_hours": "sum", "commonvoice_locale": "first"})
evals/datasets_/fleurs.py CHANGED
@@ -1,5 +1,5 @@
1
  import pandas as pd
2
- from langcodes import standardize_tag
3
  from pathlib import Path
4
  import tarfile
5
  import requests
@@ -8,7 +8,7 @@ fleurs_tags = "af_za,am_et,ar_eg,as_in,ast_es,az_az,be_by,bg_bg,bn_in,bs_ba,ca_e
8
 
9
  fleurs = pd.DataFrame(fleurs_tags.split(","), columns=["fleurs_tag"])
10
  fleurs["bcp_47"] = fleurs["fleurs_tag"].apply(
11
- lambda x: standardize_tag(x.rsplit("_")[0], macro=True)
12
  )
13
 
14
 
 
1
  import pandas as pd
2
+ from datasets_.util import standardize_bcp47
3
  from pathlib import Path
4
  import tarfile
5
  import requests
 
8
 
9
  fleurs = pd.DataFrame(fleurs_tags.split(","), columns=["fleurs_tag"])
10
  fleurs["bcp_47"] = fleurs["fleurs_tag"].apply(
11
+ lambda x: standardize_bcp47(x.rsplit("_")[0], macro=True)
12
  )
13
 
14
 
evals/datasets_/flores.py CHANGED
@@ -1,8 +1,8 @@
1
  import re
2
 
3
  import pandas as pd
4
- from datasets_.util import _get_dataset_config_names, _load_dataset
5
- from langcodes import Language, standardize_tag
6
 
7
  slug = "openlanguagedata/flores_plus"
8
  splits = _get_dataset_config_names(slug)
@@ -21,7 +21,7 @@ def aggregate_flores_paths(flores_paths):
21
  if len(flores_paths) == 1:
22
  return flores_paths.values[0]
23
  populations = [
24
- Language.get(standardize_tag(x, macro=True)).writing_population()
25
  for x in flores_paths.values
26
  ]
27
  return flores_paths.values[populations.index(max(populations))]
@@ -29,7 +29,7 @@ def aggregate_flores_paths(flores_paths):
29
 
30
  flores = pd.DataFrame(splits, columns=["flores_path"])
31
  flores["bcp_47"] = flores["flores_path"].apply(
32
- lambda x: standardize_tag(x, macro=True),
33
  )
34
  # ignore script (language is language)
35
  flores["bcp_47"] = flores["bcp_47"].apply(
 
1
  import re
2
 
3
  import pandas as pd
4
+ from datasets_.util import _get_dataset_config_names, _load_dataset, standardize_bcp47
5
+ from langcodes import Language
6
 
7
  slug = "openlanguagedata/flores_plus"
8
  splits = _get_dataset_config_names(slug)
 
21
  if len(flores_paths) == 1:
22
  return flores_paths.values[0]
23
  populations = [
24
+ Language.get(standardize_bcp47(x, macro=True)).writing_population()
25
  for x in flores_paths.values
26
  ]
27
  return flores_paths.values[populations.index(max(populations))]
 
29
 
30
  flores = pd.DataFrame(splits, columns=["flores_path"])
31
  flores["bcp_47"] = flores["flores_path"].apply(
32
+ lambda x: standardize_bcp47(x, macro=True),
33
  )
34
  # ignore script (language is language)
35
  flores["bcp_47"] = flores["bcp_47"].apply(
evals/datasets_/mmlu.py CHANGED
@@ -192,7 +192,7 @@ async def load_mmlu(language_bcp_47, nr):
192
  # TODO: add in Okapi, MMLUX @Jonas
193
  elif language_bcp_47 in tags_mmlu_autotranslated:
194
  task = _get_mmlu_item(
195
- "fair-forward/mmlu-autotranslated", language_bcp_47, category, nr
196
  )
197
  return (
198
  "fair-forward/mmlu-autotranslated",
 
192
  # TODO: add in Okapi, MMLUX @Jonas
193
  elif language_bcp_47 in tags_mmlu_autotranslated:
194
  task = _get_mmlu_item(
195
+ "fair-forward/mmlu-autotranslated", tags_mmlu_autotranslated[language_bcp_47], category, nr
196
  )
197
  return (
198
  "fair-forward/mmlu-autotranslated",
evals/datasets_/truthfulqa.py CHANGED
@@ -1,7 +1,7 @@
1
  import random
2
  from collections import Counter, defaultdict
3
 
4
- from langcodes import Language, standardize_tag
5
  from rich import print
6
  from tqdm import tqdm
7
  import asyncio
@@ -11,19 +11,19 @@ import os
11
  from datasets import Dataset, load_dataset
12
  from models import translate_google, get_google_supported_languages
13
 
14
- from datasets_.util import _get_dataset_config_names, _load_dataset
15
 
16
  slug_uhura_truthfulqa = "masakhane/uhura-truthfulqa"
17
  slug_truthfulqa_autotranslated = "fair-forward/truthfulqa-autotranslated"
18
 
19
  tags_uhura_truthfulqa = {
20
- standardize_tag(a.split("_")[0], macro=True): a
21
  for a in _get_dataset_config_names(slug_uhura_truthfulqa)
22
  if a.endswith("multiple_choice")
23
  }
24
 
25
  tags_truthfulqa_autotranslated = {
26
- standardize_tag(a, macro=True): a
27
  for a in _get_dataset_config_names(slug_truthfulqa_autotranslated)
28
  }
29
  tags_truthfulqa_autotranslated = {}
 
1
  import random
2
  from collections import Counter, defaultdict
3
 
4
+ from langcodes import Language
5
  from rich import print
6
  from tqdm import tqdm
7
  import asyncio
 
11
  from datasets import Dataset, load_dataset
12
  from models import translate_google, get_google_supported_languages
13
 
14
+ from datasets_.util import _get_dataset_config_names, _load_dataset, standardize_bcp47
15
 
16
  slug_uhura_truthfulqa = "masakhane/uhura-truthfulqa"
17
  slug_truthfulqa_autotranslated = "fair-forward/truthfulqa-autotranslated"
18
 
19
  tags_uhura_truthfulqa = {
20
+ standardize_bcp47(a.split("_")[0], macro=True): a
21
  for a in _get_dataset_config_names(slug_uhura_truthfulqa)
22
  if a.endswith("multiple_choice")
23
  }
24
 
25
  tags_truthfulqa_autotranslated = {
26
+ standardize_bcp47(a, macro=True): a
27
  for a in _get_dataset_config_names(slug_truthfulqa_autotranslated)
28
  }
29
  tags_truthfulqa_autotranslated = {}
evals/datasets_/util.py CHANGED
@@ -16,9 +16,11 @@ TOKEN = os.getenv("HUGGINGFACE_ACCESS_TOKEN")
16
  # This ensures results from different benchmarks use the same language code.
17
  MACROLANGUAGE_MAPPINGS = {
18
  "no": "nb", # Norwegian -> Norwegian BokmΓ₯l (most widely used variant)
19
- # Add more mappings here as needed, e.g.:
20
- # "ms": "zsm", # Malay -> Standard Malay
21
- # "ar": "arb", # Arabic -> Standard Arabic
 
 
22
  }
23
 
24
 
 
16
  # This ensures results from different benchmarks use the same language code.
17
  MACROLANGUAGE_MAPPINGS = {
18
  "no": "nb", # Norwegian -> Norwegian BokmΓ₯l (most widely used variant)
19
+ # Add more mappings here if they cause duplicate entries in the languages table:
20
+ # "ms": "zsm", # Malay -> Standard Malay (if both appear in population data)
21
+ # "ar": "arb", # Arabic -> Standard Arabic (if both appear in population data)
22
+ # "zh": "cmn", # Chinese -> Mandarin Chinese (if both appear in population data)
23
+ # Check LANGUAGE_SPEAKING_POPULATION to see which macrolanguages need mapping
24
  }
25
 
26
 
evals/languages.py CHANGED
@@ -4,8 +4,9 @@ import pandas as pd
4
  from datasets_.commonvoice import commonvoice
5
  from datasets_.fleurs import fleurs
6
  from datasets_.flores import flores
 
7
  from joblib.memory import Memory
8
- from langcodes import Language, standardize_tag
9
  from language_data.population_data import LANGUAGE_SPEAKING_POPULATION
10
 
11
  cache = Memory(location=".cache", verbose=0).cache
@@ -17,6 +18,10 @@ languages = {
17
  if not re.match(r".*-[A-Z]{2}$", lang)
18
  }
19
  languages = pd.DataFrame(list(languages.items()), columns=["bcp_47", "speakers"])
 
 
 
 
20
  languages["language_name"] = languages["bcp_47"].apply(
21
  lambda x: Language.get(x).display_name()
22
  )
@@ -28,7 +33,7 @@ glottolog = pd.read_csv(
28
  "data/glottolog_languoid.csv/languoid.csv", na_values=[""], keep_default_na=False
29
  ) # Min _Nan_ Chinese is not N/A!
30
  glottolog["bcp_47"] = glottolog["iso639P3code"].apply(
31
- lambda x: standardize_tag(x, macro=True) if not pd.isna(x) else None
32
  )
33
 
34
 
 
4
  from datasets_.commonvoice import commonvoice
5
  from datasets_.fleurs import fleurs
6
  from datasets_.flores import flores
7
+ from datasets_.util import standardize_bcp47
8
  from joblib.memory import Memory
9
+ from langcodes import Language
10
  from language_data.population_data import LANGUAGE_SPEAKING_POPULATION
11
 
12
  cache = Memory(location=".cache", verbose=0).cache
 
18
  if not re.match(r".*-[A-Z]{2}$", lang)
19
  }
20
  languages = pd.DataFrame(list(languages.items()), columns=["bcp_47", "speakers"])
21
+ # Standardize language codes to avoid duplicates (e.g., "no" and "nb" for Norwegian)
22
+ languages["bcp_47"] = languages["bcp_47"].apply(standardize_bcp47)
23
+ # Merge any duplicates by summing speakers
24
+ languages = languages.groupby("bcp_47", as_index=False).agg({"speakers": "sum"})
25
  languages["language_name"] = languages["bcp_47"].apply(
26
  lambda x: Language.get(x).display_name()
27
  )
 
33
  "data/glottolog_languoid.csv/languoid.csv", na_values=[""], keep_default_na=False
34
  ) # Min _Nan_ Chinese is not N/A!
35
  glottolog["bcp_47"] = glottolog["iso639P3code"].apply(
36
+ lambda x: standardize_bcp47(x, macro=True) if not pd.isna(x) else None
37
  )
38
 
39
 
evals/models.py CHANGED
@@ -26,10 +26,10 @@ important_models = [
26
  "openai/gpt-4o", # 10$
27
  "openai/gpt-3.5-turbo", # $1.50
28
  "openai/gpt-oss-120b",
29
- "anthropic/claude-4.5-sonnet",
30
- "anthropic/claude-4.5-haiku",
31
  "anthropic/claude-opus-4.1", # 15$
32
- "anthropic/claude-4-sonnet",
33
  "anthropic/claude-3.7-sonnet", # 15$
34
  "anthropic/claude-3.5-sonnet",
35
  "mistralai/mistral-small-3.2-24b-instruct", # 0.3$
@@ -41,6 +41,7 @@ important_models = [
41
  "google/gemini-2.5-flash-lite", # 0.3$
42
  "google/gemma-3-27b-it", # 0.2$
43
  # "x-ai/grok-4", # $15
 
44
  # "x-ai/grok-3", # $15
45
  "cohere/command-a",
46
  "qwen/qwen3-32b",
@@ -52,9 +53,13 @@ important_models = [
52
  # "qwen/qwen-2-72b-instruct", # 0.9$
53
  "deepseek/deepseek-v3.2-exp",
54
  "microsoft/phi-4", # 0.07$
 
55
  "amazon/nova-pro-v1", # 0.09$
56
  "moonshotai/kimi-k2", # 0.6$
 
57
  "baidu/ernie-4.5-300b-a47b",
 
 
58
  ]
59
 
60
  blocklist = [
 
26
  "openai/gpt-4o", # 10$
27
  "openai/gpt-3.5-turbo", # $1.50
28
  "openai/gpt-oss-120b",
29
+ "anthropic/claude-sonnet-4.5",
30
+ "anthropic/claude-haiku-4.5",
31
  "anthropic/claude-opus-4.1", # 15$
32
+ "anthropic/claude-sonnet-4",
33
  "anthropic/claude-3.7-sonnet", # 15$
34
  "anthropic/claude-3.5-sonnet",
35
  "mistralai/mistral-small-3.2-24b-instruct", # 0.3$
 
41
  "google/gemini-2.5-flash-lite", # 0.3$
42
  "google/gemma-3-27b-it", # 0.2$
43
  # "x-ai/grok-4", # $15
44
+ "x-ai/grok-4-fast",
45
  # "x-ai/grok-3", # $15
46
  "cohere/command-a",
47
  "qwen/qwen3-32b",
 
53
  # "qwen/qwen-2-72b-instruct", # 0.9$
54
  "deepseek/deepseek-v3.2-exp",
55
  "microsoft/phi-4", # 0.07$
56
+ "amazon/nova-premier-v1", # 12.5$
57
  "amazon/nova-pro-v1", # 0.09$
58
  "moonshotai/kimi-k2", # 0.6$
59
+ # "moonshotai/kimi-k2-thinking", # 2.5$
60
  "baidu/ernie-4.5-300b-a47b",
61
+ # "baidu/ernie-4.5-21b-a3b-thinking",
62
+ "z-ai/glm-4.6", # 1.75$
63
  ]
64
 
65
  blocklist = [
frontend/package-lock.json CHANGED
@@ -73,6 +73,7 @@
73
  "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
74
  "dev": true,
75
  "license": "MIT",
 
76
  "dependencies": {
77
  "@babel/code-frame": "^7.27.1",
78
  "@babel/generator": "^7.28.3",
@@ -767,6 +768,7 @@
767
  "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==",
768
  "dev": true,
769
  "license": "MIT",
 
770
  "dependencies": {
771
  "@babel/helper-plugin-utils": "^7.27.1"
772
  },
@@ -1708,6 +1710,7 @@
1708
  "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==",
1709
  "dev": true,
1710
  "license": "MIT",
 
1711
  "dependencies": {
1712
  "@babel/helper-annotate-as-pure": "^7.27.1",
1713
  "@babel/helper-module-imports": "^7.27.1",
@@ -3667,6 +3670,7 @@
3667
  "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
3668
  "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
3669
  "license": "MIT",
 
3670
  "dependencies": {
3671
  "@babel/code-frame": "^7.10.4",
3672
  "@babel/runtime": "^7.12.5",
@@ -4047,8 +4051,7 @@
4047
  "version": "15.7.15",
4048
  "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
4049
  "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
4050
- "license": "MIT",
4051
- "peer": true
4052
  },
4053
  "node_modules/@types/q": {
4054
  "version": "1.5.8",
@@ -4214,6 +4217,7 @@
4214
  "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
4215
  "dev": true,
4216
  "license": "MIT",
 
4217
  "dependencies": {
4218
  "@eslint-community/regexpp": "^4.4.0",
4219
  "@typescript-eslint/scope-manager": "5.62.0",
@@ -4269,6 +4273,7 @@
4269
  "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
4270
  "dev": true,
4271
  "license": "BSD-2-Clause",
 
4272
  "dependencies": {
4273
  "@typescript-eslint/scope-manager": "5.62.0",
4274
  "@typescript-eslint/types": "5.62.0",
@@ -4668,6 +4673,7 @@
4668
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
4669
  "dev": true,
4670
  "license": "MIT",
 
4671
  "bin": {
4672
  "acorn": "bin/acorn"
4673
  },
@@ -4775,6 +4781,7 @@
4775
  "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
4776
  "dev": true,
4777
  "license": "MIT",
 
4778
  "dependencies": {
4779
  "fast-deep-equal": "^3.1.1",
4780
  "fast-json-stable-stringify": "^2.0.0",
@@ -5744,6 +5751,7 @@
5744
  }
5745
  ],
5746
  "license": "MIT",
 
5747
  "dependencies": {
5748
  "caniuse-lite": "^1.0.30001737",
5749
  "electron-to-chromium": "^1.5.211",
@@ -7204,6 +7212,7 @@
7204
  "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
7205
  "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
7206
  "license": "ISC",
 
7207
  "engines": {
7208
  "node": ">=12"
7209
  }
@@ -8177,6 +8186,7 @@
8177
  "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
8178
  "dev": true,
8179
  "license": "MIT",
 
8180
  "dependencies": {
8181
  "@eslint-community/eslint-utils": "^4.2.0",
8182
  "@eslint-community/regexpp": "^4.6.1",
@@ -11195,6 +11205,7 @@
11195
  "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==",
11196
  "dev": true,
11197
  "license": "MIT",
 
11198
  "dependencies": {
11199
  "@jest/core": "^27.5.1",
11200
  "import-local": "^3.0.2",
@@ -13635,6 +13646,7 @@
13635
  }
13636
  ],
13637
  "license": "MIT",
 
13638
  "dependencies": {
13639
  "nanoid": "^3.3.11",
13640
  "picocolors": "^1.1.1",
@@ -14893,6 +14905,7 @@
14893
  "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
14894
  "dev": true,
14895
  "license": "MIT",
 
14896
  "dependencies": {
14897
  "cssesc": "^3.0.0",
14898
  "util-deprecate": "^1.0.2"
@@ -15286,6 +15299,7 @@
15286
  "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
15287
  "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
15288
  "license": "MIT",
 
15289
  "dependencies": {
15290
  "loose-envify": "^1.1.0"
15291
  },
@@ -15427,6 +15441,7 @@
15427
  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
15428
  "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
15429
  "license": "MIT",
 
15430
  "dependencies": {
15431
  "loose-envify": "^1.1.0",
15432
  "scheduler": "^0.23.2"
@@ -15454,6 +15469,7 @@
15454
  "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==",
15455
  "dev": true,
15456
  "license": "MIT",
 
15457
  "engines": {
15458
  "node": ">=0.10.0"
15459
  }
@@ -15967,6 +15983,7 @@
15967
  "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
15968
  "dev": true,
15969
  "license": "MIT",
 
15970
  "bin": {
15971
  "rollup": "dist/bin/rollup"
15972
  },
@@ -16232,6 +16249,7 @@
16232
  "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
16233
  "dev": true,
16234
  "license": "MIT",
 
16235
  "dependencies": {
16236
  "fast-deep-equal": "^3.1.3",
16237
  "fast-uri": "^3.0.1",
@@ -18039,6 +18057,7 @@
18039
  "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
18040
  "dev": true,
18041
  "license": "(MIT OR CC0-1.0)",
 
18042
  "engines": {
18043
  "node": ">=10"
18044
  },
@@ -18505,6 +18524,7 @@
18505
  "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==",
18506
  "dev": true,
18507
  "license": "MIT",
 
18508
  "dependencies": {
18509
  "@types/eslint-scope": "^3.7.7",
18510
  "@types/estree": "^1.0.8",
@@ -18578,6 +18598,7 @@
18578
  "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
18579
  "dev": true,
18580
  "license": "MIT",
 
18581
  "dependencies": {
18582
  "@types/bonjour": "^3.5.9",
18583
  "@types/connect-history-api-fallback": "^1.3.5",
@@ -19015,6 +19036,7 @@
19015
  "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
19016
  "dev": true,
19017
  "license": "MIT",
 
19018
  "dependencies": {
19019
  "fast-deep-equal": "^3.1.3",
19020
  "fast-uri": "^3.0.1",
 
73
  "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
74
  "dev": true,
75
  "license": "MIT",
76
+ "peer": true,
77
  "dependencies": {
78
  "@babel/code-frame": "^7.27.1",
79
  "@babel/generator": "^7.28.3",
 
768
  "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==",
769
  "dev": true,
770
  "license": "MIT",
771
+ "peer": true,
772
  "dependencies": {
773
  "@babel/helper-plugin-utils": "^7.27.1"
774
  },
 
1710
  "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==",
1711
  "dev": true,
1712
  "license": "MIT",
1713
+ "peer": true,
1714
  "dependencies": {
1715
  "@babel/helper-annotate-as-pure": "^7.27.1",
1716
  "@babel/helper-module-imports": "^7.27.1",
 
3670
  "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
3671
  "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
3672
  "license": "MIT",
3673
+ "peer": true,
3674
  "dependencies": {
3675
  "@babel/code-frame": "^7.10.4",
3676
  "@babel/runtime": "^7.12.5",
 
4051
  "version": "15.7.15",
4052
  "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
4053
  "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
4054
+ "license": "MIT"
 
4055
  },
4056
  "node_modules/@types/q": {
4057
  "version": "1.5.8",
 
4217
  "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
4218
  "dev": true,
4219
  "license": "MIT",
4220
+ "peer": true,
4221
  "dependencies": {
4222
  "@eslint-community/regexpp": "^4.4.0",
4223
  "@typescript-eslint/scope-manager": "5.62.0",
 
4273
  "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
4274
  "dev": true,
4275
  "license": "BSD-2-Clause",
4276
+ "peer": true,
4277
  "dependencies": {
4278
  "@typescript-eslint/scope-manager": "5.62.0",
4279
  "@typescript-eslint/types": "5.62.0",
 
4673
  "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
4674
  "dev": true,
4675
  "license": "MIT",
4676
+ "peer": true,
4677
  "bin": {
4678
  "acorn": "bin/acorn"
4679
  },
 
4781
  "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
4782
  "dev": true,
4783
  "license": "MIT",
4784
+ "peer": true,
4785
  "dependencies": {
4786
  "fast-deep-equal": "^3.1.1",
4787
  "fast-json-stable-stringify": "^2.0.0",
 
5751
  }
5752
  ],
5753
  "license": "MIT",
5754
+ "peer": true,
5755
  "dependencies": {
5756
  "caniuse-lite": "^1.0.30001737",
5757
  "electron-to-chromium": "^1.5.211",
 
7212
  "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
7213
  "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
7214
  "license": "ISC",
7215
+ "peer": true,
7216
  "engines": {
7217
  "node": ">=12"
7218
  }
 
8186
  "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
8187
  "dev": true,
8188
  "license": "MIT",
8189
+ "peer": true,
8190
  "dependencies": {
8191
  "@eslint-community/eslint-utils": "^4.2.0",
8192
  "@eslint-community/regexpp": "^4.6.1",
 
11205
  "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==",
11206
  "dev": true,
11207
  "license": "MIT",
11208
+ "peer": true,
11209
  "dependencies": {
11210
  "@jest/core": "^27.5.1",
11211
  "import-local": "^3.0.2",
 
13646
  }
13647
  ],
13648
  "license": "MIT",
13649
+ "peer": true,
13650
  "dependencies": {
13651
  "nanoid": "^3.3.11",
13652
  "picocolors": "^1.1.1",
 
14905
  "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
14906
  "dev": true,
14907
  "license": "MIT",
14908
+ "peer": true,
14909
  "dependencies": {
14910
  "cssesc": "^3.0.0",
14911
  "util-deprecate": "^1.0.2"
 
15299
  "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
15300
  "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
15301
  "license": "MIT",
15302
+ "peer": true,
15303
  "dependencies": {
15304
  "loose-envify": "^1.1.0"
15305
  },
 
15441
  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
15442
  "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
15443
  "license": "MIT",
15444
+ "peer": true,
15445
  "dependencies": {
15446
  "loose-envify": "^1.1.0",
15447
  "scheduler": "^0.23.2"
 
15469
  "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==",
15470
  "dev": true,
15471
  "license": "MIT",
15472
+ "peer": true,
15473
  "engines": {
15474
  "node": ">=0.10.0"
15475
  }
 
15983
  "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
15984
  "dev": true,
15985
  "license": "MIT",
15986
+ "peer": true,
15987
  "bin": {
15988
  "rollup": "dist/bin/rollup"
15989
  },
 
16249
  "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
16250
  "dev": true,
16251
  "license": "MIT",
16252
+ "peer": true,
16253
  "dependencies": {
16254
  "fast-deep-equal": "^3.1.3",
16255
  "fast-uri": "^3.0.1",
 
18057
  "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
18058
  "dev": true,
18059
  "license": "(MIT OR CC0-1.0)",
18060
+ "peer": true,
18061
  "engines": {
18062
  "node": ">=10"
18063
  },
 
18524
  "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==",
18525
  "dev": true,
18526
  "license": "MIT",
18527
+ "peer": true,
18528
  "dependencies": {
18529
  "@types/eslint-scope": "^3.7.7",
18530
  "@types/estree": "^1.0.8",
 
18598
  "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
18599
  "dev": true,
18600
  "license": "MIT",
18601
+ "peer": true,
18602
  "dependencies": {
18603
  "@types/bonjour": "^3.5.9",
18604
  "@types/connect-history-api-fallback": "^1.3.5",
 
19036
  "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
19037
  "dev": true,
19038
  "license": "MIT",
19039
+ "peer": true,
19040
  "dependencies": {
19041
  "fast-deep-equal": "^3.1.3",
19042
  "fast-uri": "^3.0.1",
frontend/src/components/WorldMap.js CHANGED
@@ -26,10 +26,10 @@ const makeTitle = data => d => {
26
  a =>
27
  `${smoothProgressBar(a.population / pop)} ${
28
  a.name
29
- } – ${a.score === null || a.score === undefined ? "n/a" : a.score.toFixed(2)}`
30
  )
31
  .join('\n\n') + (languages?.length > 10 ? `\n\n...` : '')
32
- return `${d.properties.ADMIN} – ${cData?.score === null || cData?.score === undefined ? "n/a" : cData.score.toFixed(2)}\n\n${langstring}`
33
  }
34
 
35
  const WorldMap = ({ data, width = 750, height = 500, allLanguages = [] }) => {
 
26
  a =>
27
  `${smoothProgressBar(a.population / pop)} ${
28
  a.name
29
+ } – ${a.score === null || a.score === undefined ? "na" : a.score.toFixed(2)}`
30
  )
31
  .join('\n\n') + (languages?.length > 10 ? `\n\n...` : '')
32
+ return `${d.properties.ADMIN} – ${cData?.score === null || cData?.score === undefined ? "na" : cData.score.toFixed(2)}\n\n${langstring}`
33
  }
34
 
35
  const WorldMap = ({ data, width = 750, height = 500, allLanguages = [] }) => {