hdx-python-country 3.7.5__tar.gz → 3.7.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.config/pre-commit-config.yaml +2 -2
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/PKG-INFO +1 -1
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/requirements.txt +8 -8
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/_version.py +2 -2
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/adminlevel.py +29 -18
- hdx_python_country-3.7.7/tests/fixtures/global_pcode_lengths.csv +158 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/fixtures/global_pcodes_adm_1_2.csv +1926 -3743
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/test_adminlevel.py +25 -13
- hdx_python_country-3.7.5/tests/fixtures/global_pcode_lengths.csv +0 -159
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.config/coveragerc +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.config/pytest.ini +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.config/ruff.toml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.github/workflows/publish.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.github/workflows/run-python-tests.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/.gitignore +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/CONTRIBUTING.md +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/LICENSE +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/README.md +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/documentation/.readthedocs.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/documentation/main.md +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/documentation/pydoc-markdown.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/pyproject.toml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/Countries & Territories Taxonomy MVP - C&T Taxonomy with HXL Tags.csv +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/__init__.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/country.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/currency.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/phonetics.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/src/hdx/location/wfp_exchangerates.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/fixtures/adminlevel.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/fixtures/adminlevelparent.yaml +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/fixtures/secondary_historic_rates.csv +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/fixtures/secondary_rates.json +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/Countries_UZB_Deleted.csv +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/__init__.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/test_country.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/test_currency.py +0 -0
- {hdx_python_country-3.7.5 → hdx_python_country-3.7.7}/tests/hdx/location/test_wfp_exchangerates.py +0 -0
|
@@ -8,7 +8,7 @@ repos:
|
|
|
8
8
|
- id: end-of-file-fixer
|
|
9
9
|
- id: check-ast
|
|
10
10
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
11
|
-
rev: v0.
|
|
11
|
+
rev: v0.5.1
|
|
12
12
|
hooks:
|
|
13
13
|
# Run the linter.
|
|
14
14
|
- id: ruff
|
|
@@ -17,7 +17,7 @@ repos:
|
|
|
17
17
|
- id: ruff-format
|
|
18
18
|
args: [--config, .config/ruff.toml]
|
|
19
19
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
20
|
-
rev: 0.2.
|
|
20
|
+
rev: 0.2.13
|
|
21
21
|
hooks:
|
|
22
22
|
# Run the pip compile
|
|
23
23
|
- id: pip-compile
|
|
@@ -18,7 +18,7 @@ charset-normalizer==3.3.2
|
|
|
18
18
|
# via requests
|
|
19
19
|
click==8.1.7
|
|
20
20
|
# via typer
|
|
21
|
-
coverage==7.
|
|
21
|
+
coverage==7.6.0
|
|
22
22
|
# via pytest-cov
|
|
23
23
|
distlib==0.3.8
|
|
24
24
|
# via virtualenv
|
|
@@ -30,9 +30,9 @@ frictionless==5.17.0
|
|
|
30
30
|
# via hdx-python-utilities
|
|
31
31
|
hdx-python-utilities==3.7.2
|
|
32
32
|
# via hdx-python-country (pyproject.toml)
|
|
33
|
-
humanize==4.
|
|
33
|
+
humanize==4.10.0
|
|
34
34
|
# via frictionless
|
|
35
|
-
identify==2.
|
|
35
|
+
identify==2.6.0
|
|
36
36
|
# via pre-commit
|
|
37
37
|
idna==3.7
|
|
38
38
|
# via requests
|
|
@@ -48,7 +48,7 @@ jsonlines==4.0.0
|
|
|
48
48
|
# via hdx-python-utilities
|
|
49
49
|
jsonpath-ng==1.6.1
|
|
50
50
|
# via libhxl
|
|
51
|
-
jsonschema==4.
|
|
51
|
+
jsonschema==4.23.0
|
|
52
52
|
# via
|
|
53
53
|
# frictionless
|
|
54
54
|
# tableschema-to-template
|
|
@@ -92,7 +92,7 @@ pygments==2.18.0
|
|
|
92
92
|
# via rich
|
|
93
93
|
pyphonetics==0.5.3
|
|
94
94
|
# via hdx-python-country (pyproject.toml)
|
|
95
|
-
pytest==8.
|
|
95
|
+
pytest==8.3.1
|
|
96
96
|
# via
|
|
97
97
|
# hdx-python-country (pyproject.toml)
|
|
98
98
|
# pytest-cov
|
|
@@ -129,7 +129,7 @@ rfc3986==2.0.0
|
|
|
129
129
|
# via frictionless
|
|
130
130
|
rich==13.7.1
|
|
131
131
|
# via typer
|
|
132
|
-
rpds-py==0.
|
|
132
|
+
rpds-py==0.19.0
|
|
133
133
|
# via
|
|
134
134
|
# jsonschema
|
|
135
135
|
# referencing
|
|
@@ -147,7 +147,7 @@ six==1.16.0
|
|
|
147
147
|
# python-dateutil
|
|
148
148
|
stringcase==1.2.0
|
|
149
149
|
# via frictionless
|
|
150
|
-
structlog==24.
|
|
150
|
+
structlog==24.4.0
|
|
151
151
|
# via libhxl
|
|
152
152
|
tableschema-to-template==0.0.13
|
|
153
153
|
# via hdx-python-utilities
|
|
@@ -171,7 +171,7 @@ urllib3==2.2.2
|
|
|
171
171
|
# via
|
|
172
172
|
# libhxl
|
|
173
173
|
# requests
|
|
174
|
-
validators==0.
|
|
174
|
+
validators==0.33.0
|
|
175
175
|
# via frictionless
|
|
176
176
|
virtualenv==20.26.3
|
|
177
177
|
# via pre-commit
|
|
@@ -125,7 +125,7 @@ class AdminLevel:
|
|
|
125
125
|
self,
|
|
126
126
|
countryiso3: str,
|
|
127
127
|
pcode: str,
|
|
128
|
-
adm_name: str,
|
|
128
|
+
adm_name: Optional[str],
|
|
129
129
|
parent: Optional[str],
|
|
130
130
|
):
|
|
131
131
|
"""
|
|
@@ -134,7 +134,7 @@ class AdminLevel:
|
|
|
134
134
|
Args:
|
|
135
135
|
countryiso3 (str): Country
|
|
136
136
|
pcode (str): P-code
|
|
137
|
-
adm_name (str): Administrative name
|
|
137
|
+
adm_name (Optional[str]): Administrative name (which can be None)
|
|
138
138
|
parent (Optional[str]): Parent p-code
|
|
139
139
|
|
|
140
140
|
Returns:
|
|
@@ -142,20 +142,27 @@ class AdminLevel:
|
|
|
142
142
|
"""
|
|
143
143
|
self.pcode_lengths[countryiso3] = len(pcode)
|
|
144
144
|
self.pcodes.append(pcode)
|
|
145
|
+
if adm_name is None:
|
|
146
|
+
adm_name = ""
|
|
145
147
|
self.pcode_to_name[pcode] = adm_name
|
|
148
|
+
self.pcode_to_iso3[pcode] = countryiso3
|
|
149
|
+
if not adm_name:
|
|
150
|
+
logger.error(
|
|
151
|
+
f"Admin name is blank for pcode {pcode} of {countryiso3}!"
|
|
152
|
+
)
|
|
153
|
+
return
|
|
146
154
|
|
|
155
|
+
adm_name = normalise(adm_name)
|
|
147
156
|
name_to_pcode = self.name_to_pcode.get(countryiso3, {})
|
|
148
|
-
name_to_pcode[
|
|
157
|
+
name_to_pcode[adm_name] = pcode
|
|
149
158
|
self.name_to_pcode[countryiso3] = name_to_pcode
|
|
150
|
-
self.pcode_to_iso3[pcode] = countryiso3
|
|
151
|
-
self.pcode_to_iso3[pcode] = countryiso3
|
|
152
159
|
|
|
153
160
|
if self.use_parent:
|
|
154
161
|
name_parent_to_pcode = self.name_parent_to_pcode.get(
|
|
155
162
|
countryiso3, {}
|
|
156
163
|
)
|
|
157
164
|
name_to_pcode = name_parent_to_pcode.get(parent, {})
|
|
158
|
-
name_to_pcode[
|
|
165
|
+
name_to_pcode[adm_name] = pcode
|
|
159
166
|
name_parent_to_pcode[parent] = name_to_pcode
|
|
160
167
|
self.name_parent_to_pcode[countryiso3] = name_parent_to_pcode
|
|
161
168
|
self.pcode_to_parent[pcode] = parent
|
|
@@ -554,6 +561,7 @@ class AdminLevel:
|
|
|
554
561
|
self,
|
|
555
562
|
countryiso3: str,
|
|
556
563
|
name: str,
|
|
564
|
+
normalised_name: str,
|
|
557
565
|
**kwargs: Any,
|
|
558
566
|
) -> Optional[str]:
|
|
559
567
|
"""Fuzzy match name to pcode
|
|
@@ -561,6 +569,7 @@ class AdminLevel:
|
|
|
561
569
|
Args:
|
|
562
570
|
countryiso3 (str): ISO3 country code
|
|
563
571
|
name (str): Name to match
|
|
572
|
+
normalised_name (str): Normalised name
|
|
564
573
|
**kwargs:
|
|
565
574
|
parent (Optional[str]): Parent admin code
|
|
566
575
|
logname (str): Log using this identifying name. Defaults to not logging.
|
|
@@ -597,13 +606,12 @@ class AdminLevel:
|
|
|
597
606
|
if logname:
|
|
598
607
|
self.errors.add((logname, countryiso3, parent))
|
|
599
608
|
return None
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
adm_name_lookup,
|
|
609
|
+
alt_normalised_name = multiple_replace(
|
|
610
|
+
normalised_name,
|
|
603
611
|
self.get_admin_name_replacements(countryiso3, parent),
|
|
604
612
|
)
|
|
605
613
|
pcode = name_to_pcode.get(
|
|
606
|
-
|
|
614
|
+
normalised_name, name_to_pcode.get(alt_normalised_name)
|
|
607
615
|
)
|
|
608
616
|
if not pcode and name.lower() in self.admin_fuzzy_dont:
|
|
609
617
|
if logname:
|
|
@@ -611,7 +619,7 @@ class AdminLevel:
|
|
|
611
619
|
return None
|
|
612
620
|
if not pcode:
|
|
613
621
|
for map_name in name_to_pcode:
|
|
614
|
-
if
|
|
622
|
+
if normalised_name in map_name:
|
|
615
623
|
pcode = name_to_pcode[map_name]
|
|
616
624
|
if logname:
|
|
617
625
|
self.matches.add(
|
|
@@ -625,7 +633,7 @@ class AdminLevel:
|
|
|
625
633
|
)
|
|
626
634
|
break
|
|
627
635
|
for map_name in name_to_pcode:
|
|
628
|
-
if
|
|
636
|
+
if alt_normalised_name in map_name:
|
|
629
637
|
pcode = name_to_pcode[map_name]
|
|
630
638
|
if logname:
|
|
631
639
|
self.matches.add(
|
|
@@ -659,8 +667,8 @@ class AdminLevel:
|
|
|
659
667
|
|
|
660
668
|
matching_index = self.phonetics.match(
|
|
661
669
|
map_names,
|
|
662
|
-
|
|
663
|
-
alternative_name=
|
|
670
|
+
normalised_name,
|
|
671
|
+
alternative_name=alt_normalised_name,
|
|
664
672
|
transform_possible_names=[al_transform_1, al_transform_2],
|
|
665
673
|
)
|
|
666
674
|
|
|
@@ -754,6 +762,7 @@ class AdminLevel:
|
|
|
754
762
|
)
|
|
755
763
|
return pcode, True
|
|
756
764
|
else:
|
|
765
|
+
normalised_name = normalise(name)
|
|
757
766
|
if parent:
|
|
758
767
|
name_parent_to_pcode = self.name_parent_to_pcode.get(
|
|
759
768
|
countryiso3
|
|
@@ -761,18 +770,20 @@ class AdminLevel:
|
|
|
761
770
|
if name_parent_to_pcode:
|
|
762
771
|
name_to_pcode = name_parent_to_pcode.get(parent)
|
|
763
772
|
if name_to_pcode is not None:
|
|
764
|
-
pcode = name_to_pcode.get(
|
|
773
|
+
pcode = name_to_pcode.get(normalised_name)
|
|
765
774
|
if pcode:
|
|
766
775
|
return pcode, True
|
|
767
776
|
else:
|
|
768
777
|
name_to_pcode = self.name_to_pcode.get(countryiso3)
|
|
769
778
|
if name_to_pcode is not None:
|
|
770
|
-
pcode = name_to_pcode.get(
|
|
779
|
+
pcode = name_to_pcode.get(normalised_name)
|
|
771
780
|
if pcode:
|
|
772
781
|
return pcode, True
|
|
773
|
-
if not fuzzy_match or len(
|
|
782
|
+
if not fuzzy_match or len(normalised_name) < fuzzy_length:
|
|
774
783
|
return None, True
|
|
775
|
-
pcode = self.fuzzy_pcode(
|
|
784
|
+
pcode = self.fuzzy_pcode(
|
|
785
|
+
countryiso3, name, normalised_name, **kwargs
|
|
786
|
+
)
|
|
776
787
|
return pcode, False
|
|
777
788
|
|
|
778
789
|
def output_matches(self) -> List[str]:
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
Location,Country Length,Admin 1 Length,Admin 2 Length,Admin 3 Length,Admin 4 Length,Admin 5 Length
|
|
2
|
+
#country+code,#country+len,#adm1+len,#adm2+len,#adm3+len,#adm4+len,#adm5+len
|
|
3
|
+
AFG,2,2,2,,,
|
|
4
|
+
AGO,2,2,3,3,,
|
|
5
|
+
ALB,2,2,2,2,,
|
|
6
|
+
ARE,2,2,,,,
|
|
7
|
+
ARG,2,3,3,,,
|
|
8
|
+
ARM,2,2,1,3,,
|
|
9
|
+
ATG,2,2,,,,
|
|
10
|
+
AZE,2,8,,,,
|
|
11
|
+
BDI,3,3,3,,,
|
|
12
|
+
BEN,2,2,2,,,
|
|
13
|
+
BES,3,1,,,,
|
|
14
|
+
BFA,2,2,2,2,,
|
|
15
|
+
BGD,2,2,2,2,2,
|
|
16
|
+
BGR,2,3,3,,,
|
|
17
|
+
BLR,2,3,3,,,
|
|
18
|
+
BLZ,2,2,,,,
|
|
19
|
+
BMU,2,2,1,,,
|
|
20
|
+
BOL,2,2,2,2,,
|
|
21
|
+
BRA,2,2,5,,,
|
|
22
|
+
BRB,2,2,,,,
|
|
23
|
+
BTN,2,3,2,,,
|
|
24
|
+
BWA,2,2,2,2,,
|
|
25
|
+
CAF,2,2,1,1,2,
|
|
26
|
+
CHL,2,2,1,2,,
|
|
27
|
+
CHN,2,3,3,,,
|
|
28
|
+
CIV,2,2,2,2,,
|
|
29
|
+
CMR,2,3,3,3,,
|
|
30
|
+
COD,2,2,2,,,
|
|
31
|
+
COG,2,2,2,,,
|
|
32
|
+
COL,2,2,3,,,
|
|
33
|
+
COM,2,1,1,1,,
|
|
34
|
+
CPV,2,2,2,,,
|
|
35
|
+
CRI,2,1,2,2,,
|
|
36
|
+
CUB,2,2,2,,,
|
|
37
|
+
CUW,2,2,,,,
|
|
38
|
+
CYM,2,2,,,,
|
|
39
|
+
DJI,2,2,2,,,
|
|
40
|
+
DMA,2,2,,,,
|
|
41
|
+
DOM,2,2,2,2,2,
|
|
42
|
+
DZA,2,3,3,,,
|
|
43
|
+
ECU,2,2,2,2,,
|
|
44
|
+
EGY,2,2,2,,,
|
|
45
|
+
ERI,2,1,2,,,
|
|
46
|
+
ESH,2,2,,,,
|
|
47
|
+
ETH,2,2,2,2,,
|
|
48
|
+
FJI,2,1,2,2,,
|
|
49
|
+
FSM,2,1,2,,,
|
|
50
|
+
GAB,3,3,3,,,
|
|
51
|
+
GEO,2,2,2,,,
|
|
52
|
+
GHA,2,2,2,,,
|
|
53
|
+
GIN,2,3,3,2,,
|
|
54
|
+
GLP,2,2,2,,,
|
|
55
|
+
GMB,2,2,2,2,,
|
|
56
|
+
GNB,2,2,2,,,
|
|
57
|
+
GNQ,2,3,3,,,
|
|
58
|
+
GRD,2,2,,,,
|
|
59
|
+
GTM,2,2,2,,,
|
|
60
|
+
GUF,2,1,3,,,
|
|
61
|
+
GUY,2,2,2,,,
|
|
62
|
+
HND,2,2,2,,,
|
|
63
|
+
HTI,2,2,2,3,,
|
|
64
|
+
HUN,2,3,3,,,
|
|
65
|
+
IDN,2,2,2,3,,
|
|
66
|
+
IRN,2,3,3,,,
|
|
67
|
+
IRQ,2,3,3,3,,
|
|
68
|
+
JAM,2,2,3,,,
|
|
69
|
+
KAZ,3,3,3,,,
|
|
70
|
+
KEN,2,3,3,,,
|
|
71
|
+
KGZ,2,11,0,0,,
|
|
72
|
+
KHM,2,2,2,2,,
|
|
73
|
+
KIR,2,1,2,,,
|
|
74
|
+
KNA,2,2,,,,
|
|
75
|
+
KWT,2,2,,,,
|
|
76
|
+
LAO,2,2,2,,,
|
|
77
|
+
LBN,2,1,1,1,,
|
|
78
|
+
LBR,2,2,2,,,
|
|
79
|
+
LBY,2,2,2,,,
|
|
80
|
+
LCA,2,2,9,,,
|
|
81
|
+
LKA,2,1,1,2,3,
|
|
82
|
+
LSO,2,1,2,,,
|
|
83
|
+
MAR,2,3,3,7,1,
|
|
84
|
+
MDA,2,3,,,,
|
|
85
|
+
MDG,2,2,7|3,-1|3,3,
|
|
86
|
+
MDV,2,3,3,3,,
|
|
87
|
+
MEX,2,2,3,,,
|
|
88
|
+
MHL,2,2,2,,,
|
|
89
|
+
MLI,2,2,2,2,,
|
|
90
|
+
MMR,3,3,4,-1,3,3
|
|
91
|
+
MNG,2,2,2,,,
|
|
92
|
+
MOZ,2,2,2,2,,
|
|
93
|
+
MRT,2,2,1,2,,
|
|
94
|
+
MSR,2,2,,,,
|
|
95
|
+
MTQ,2,2,2,,,
|
|
96
|
+
MUS,2,2,,,,
|
|
97
|
+
MWI,2,1,2,2,,
|
|
98
|
+
MYS,2,2,2,,,
|
|
99
|
+
NAM,2,2,2,,,
|
|
100
|
+
NER,2,3,3,3,,
|
|
101
|
+
NGA,2,3,3,3,,
|
|
102
|
+
NIC,2,2,2,,,
|
|
103
|
+
NPL,2,2,2,3,,
|
|
104
|
+
OMN,2,2,2,,,
|
|
105
|
+
PAK,2,1,2,2,,
|
|
106
|
+
PAN,2,2,2,2,,
|
|
107
|
+
PER,2,2,2,2,,
|
|
108
|
+
PHL,2,2,3,2,3,
|
|
109
|
+
PNG,2,2,2,2,,
|
|
110
|
+
POL,2,3,3,,,
|
|
111
|
+
PRI,2,2,,,,
|
|
112
|
+
PRK,2,2,2,,,
|
|
113
|
+
PRY,2,2,2,,,
|
|
114
|
+
PSE,2,2,2,,,
|
|
115
|
+
QAT,3,3,3,,,
|
|
116
|
+
ROU,2,3,3,,,
|
|
117
|
+
RUS,2,3,3,,,
|
|
118
|
+
RWA,2,1,1,2,2,
|
|
119
|
+
SAU,2,2,,,,
|
|
120
|
+
SDN,2,2,3,,,
|
|
121
|
+
SEN,2,2,2,2,,
|
|
122
|
+
SLB,2,2,4,4,,
|
|
123
|
+
SLE,2,2,2,2,2,
|
|
124
|
+
SLV,2,2,2,,,
|
|
125
|
+
SOM,2,2,2,,,
|
|
126
|
+
SSD,2,2,2,2,,
|
|
127
|
+
STP,2,2,2,,,
|
|
128
|
+
SUR,2,2,2,,,
|
|
129
|
+
SVK,2,3,3,,,
|
|
130
|
+
SWZ,2,1,2,,,
|
|
131
|
+
SXM,2,1,,,,
|
|
132
|
+
SYC,2,1,1,4,,
|
|
133
|
+
SYR,2,2,2,2,,
|
|
134
|
+
TCA,2,1,2,,,
|
|
135
|
+
TCD,2,2,2,2,,
|
|
136
|
+
TGO,2,2,2,2,,
|
|
137
|
+
THA,2,2,2,2,,
|
|
138
|
+
TJK,0,7,0,,,
|
|
139
|
+
TLS,2,2,2,2,,
|
|
140
|
+
TON,2,1,1,2,,
|
|
141
|
+
TTO,2,2,,,,
|
|
142
|
+
TUN,2,1,1,2,2,
|
|
143
|
+
TUR,3,3,3,3,3,
|
|
144
|
+
TZA,2,2,2,3|4,,
|
|
145
|
+
UGA,2,1,3,2,2,
|
|
146
|
+
UKR,2,2,2,3,3,
|
|
147
|
+
URY,2,2,3,,,
|
|
148
|
+
UZB,2,2,3,,,
|
|
149
|
+
VCT,2,1,2,,,
|
|
150
|
+
VEN,2,2,2,2,,
|
|
151
|
+
VGB,2,2,,,,
|
|
152
|
+
VIR,2,3,5,,,
|
|
153
|
+
VNM,2,3,2,,,
|
|
154
|
+
VUT,2,2,3,,,
|
|
155
|
+
YEM,2,2,2,2,,
|
|
156
|
+
ZAF,2,1,2,1,3,
|
|
157
|
+
ZMB,2,3,3,3,3,
|
|
158
|
+
ZWE,2,2,2,2,,
|