upgini 1.1.274a4__tar.gz → 1.1.274a3388.post2__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.
Potentially problematic release.
This version of upgini might be problematic. Click here for more details.
- {upgini-1.1.274a4/src/upgini.egg-info → upgini-1.1.274a3388.post2}/PKG-INFO +2 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/setup.py +2 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/date.py +17 -3
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/feature.py +70 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/operand.py +10 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/data_source/data_source_publisher.py +1 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/features_enricher.py +8 -32
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/metrics.py +0 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/normalizer/phone_normalizer.py +2 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/strings.properties +0 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/datetime_utils.py +0 -3
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2/src/upgini.egg-info}/PKG-INFO +2 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini.egg-info/SOURCES.txt +0 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini.egg-info/requires.txt +1 -1
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_autofe_operands.py +44 -2
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_features_enricher.py +13 -18
- upgini-1.1.274a4/src/upgini/fingerprint.js +0 -8
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/LICENSE +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/README.md +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/pyproject.toml +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/setup.cfg +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/ads.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/ads_management/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/ads_management/ads_manager.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/all_operands.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/binary.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/groupby.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/unary.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/autofe/vector.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/data_source/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/dataset.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/errors.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/http.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/mdc/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/mdc/context.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/metadata.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/normalizer/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/exceptions.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/strings_widget.properties +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/sampler/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/sampler/base.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/sampler/random_under_sampler.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/sampler/utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/search_task.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/spinner.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/__init__.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/base_search_key_detector.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/blocked_time_series.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/country_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/custom_loss_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/cv_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/deduplicate_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/display_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/email_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/fallback_progress_bar.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/features_validator.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/format.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/ip_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/phone_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/postal_code_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/progress_bar.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/sklearn_ext.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/target_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/track_info.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/utils/warning_counter.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/version_validator.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini.egg-info/dependency_links.txt +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini.egg-info/top_level.txt +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_binary_dataset.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_blocked_time_series.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_categorical_dataset.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_continuous_dataset.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_country_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_custom_loss_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_datetime_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_email_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_etalon_validation.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_metrics.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_phone_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_postal_code_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_target_utils.py +0 -0
- {upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/tests/test_widget.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: upgini
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.274a3388.post2
|
|
4
4
|
Summary: Intelligent data search & enrichment for Machine Learning
|
|
5
5
|
Home-page: https://upgini.com/
|
|
6
6
|
Author: Upgini Developers
|
|
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: python-dateutil>=2.8.0
|
|
30
30
|
Requires-Dist: requests>=2.8.0
|
|
31
|
-
Requires-Dist: pandas<2.
|
|
31
|
+
Requires-Dist: pandas<2.0.0,>=1.1.0
|
|
32
32
|
Requires-Dist: numpy>=1.19.0
|
|
33
33
|
Requires-Dist: scikit-learn>=1.3.0
|
|
34
34
|
Requires-Dist: pydantic<2.0.0,>=1.8.2
|
|
@@ -40,7 +40,7 @@ def send_log(msg: str):
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
here = Path(__file__).parent.resolve()
|
|
43
|
-
version = "1.1.
|
|
43
|
+
version = "1.1.274a3388-2"
|
|
44
44
|
try:
|
|
45
45
|
send_log(f"Start setup PyLib version {version}")
|
|
46
46
|
setup(
|
|
@@ -77,7 +77,7 @@ try:
|
|
|
77
77
|
install_requires=[
|
|
78
78
|
"python-dateutil>=2.8.0",
|
|
79
79
|
"requests>=2.8.0",
|
|
80
|
-
"pandas>=1.1.0,<2.
|
|
80
|
+
"pandas>=1.1.0,<2.0.0",
|
|
81
81
|
"numpy>=1.19.0",
|
|
82
82
|
"scikit-learn>=1.3.0",
|
|
83
83
|
"pydantic>=1.8.2,<2.0.0",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import Any, Optional, Union
|
|
1
|
+
from typing import Any, List, Optional, Union
|
|
2
2
|
import numpy as np
|
|
3
3
|
import pandas as pd
|
|
4
4
|
from pydantic import BaseModel
|
|
5
5
|
|
|
6
|
-
from upgini.autofe.operand import PandasOperand
|
|
6
|
+
from upgini.autofe.operand import MultiOperand, Operand, PandasOperand
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class DateDiffMixin(BaseModel):
|
|
@@ -24,6 +24,7 @@ class DateDiff(PandasOperand, DateDiffMixin):
|
|
|
24
24
|
name = "date_diff"
|
|
25
25
|
is_binary = True
|
|
26
26
|
has_symmetry_importance = True
|
|
27
|
+
common_type = "date_diff"
|
|
27
28
|
|
|
28
29
|
def calculate_binary(self, left: pd.Series, right: pd.Series) -> pd.Series:
|
|
29
30
|
left = self._convert_to_date(left, self.left_unit)
|
|
@@ -39,6 +40,7 @@ class DateDiffType2(PandasOperand, DateDiffMixin):
|
|
|
39
40
|
name = "date_diff_type2"
|
|
40
41
|
is_binary = True
|
|
41
42
|
has_symmetry_importance = True
|
|
43
|
+
common_type = "date_diff"
|
|
42
44
|
|
|
43
45
|
def calculate_binary(self, left: pd.Series, right: pd.Series) -> pd.Series:
|
|
44
46
|
left = self._convert_to_date(left, self.left_unit)
|
|
@@ -46,7 +48,6 @@ class DateDiffType2(PandasOperand, DateDiffMixin):
|
|
|
46
48
|
future = right + (left.dt.year - right.dt.year).apply(
|
|
47
49
|
lambda y: np.datetime64("NaT") if np.isnan(y) else pd.tseries.offsets.DateOffset(years=y)
|
|
48
50
|
)
|
|
49
|
-
future = pd.to_datetime(future)
|
|
50
51
|
before = future[future < left]
|
|
51
52
|
future[future < left] = before + pd.tseries.offsets.DateOffset(years=1)
|
|
52
53
|
diff = (future - left) / np.timedelta64(1, self.diff_unit)
|
|
@@ -61,6 +62,7 @@ class DateListDiff(PandasOperand, DateDiffMixin):
|
|
|
61
62
|
is_binary = True
|
|
62
63
|
has_symmetry_importance = True
|
|
63
64
|
aggregation: str
|
|
65
|
+
common_type = "date_diff_list"
|
|
64
66
|
|
|
65
67
|
def __init__(self, **data: Any) -> None:
|
|
66
68
|
if "name" not in data:
|
|
@@ -87,6 +89,9 @@ class DateListDiff(PandasOperand, DateDiffMixin):
|
|
|
87
89
|
|
|
88
90
|
return method(x) if len(x) > 0 else default
|
|
89
91
|
|
|
92
|
+
def make_multi_operand(self, operands: List[Operand]) -> Optional[MultiOperand]:
|
|
93
|
+
return DateListDiffMulti(children=operands, aggregation="")
|
|
94
|
+
|
|
90
95
|
|
|
91
96
|
class DateListDiffBounded(DateListDiff):
|
|
92
97
|
lower_bound: Optional[int]
|
|
@@ -109,3 +114,12 @@ class DateListDiffBounded(DateListDiff):
|
|
|
109
114
|
def _agg(self, x):
|
|
110
115
|
x = x[(x >= (self.lower_bound or -np.inf)) & (x < (self.upper_bound or np.inf))]
|
|
111
116
|
return super()._agg(x)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class DateListDiffMulti(DateListDiff, MultiOperand):
|
|
120
|
+
def calculate_binary(self, left: pd.Series, right: pd.Series) -> pd.Series:
|
|
121
|
+
left = self._convert_to_date(left, self.left_unit)
|
|
122
|
+
right = right.apply(lambda x: pd.arrays.DatetimeArray(self._convert_to_date(x, self.right_unit)))
|
|
123
|
+
|
|
124
|
+
diff = pd.Series(left - right.values).apply(self._diff)
|
|
125
|
+
return diff.apply(lambda x: [c._agg(x) for c in self.children])
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import hashlib
|
|
2
2
|
import itertools
|
|
3
|
+
import operator
|
|
3
4
|
from typing import Dict, List, Optional, Tuple, Union
|
|
4
5
|
|
|
6
|
+
from more_itertools import map_reduce
|
|
5
7
|
import numpy as np
|
|
6
8
|
import pandas as pd
|
|
7
9
|
from pandas._typing import DtypeObj
|
|
8
10
|
|
|
9
11
|
from upgini.autofe.all_operands import find_op
|
|
10
|
-
from upgini.autofe.operand import Operand, PandasOperand
|
|
12
|
+
from upgini.autofe.operand import MultiOperand, Operand, PandasOperand
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class Column:
|
|
@@ -29,6 +31,9 @@ class Column:
|
|
|
29
31
|
else:
|
|
30
32
|
return feature_name[2:last_component_idx]
|
|
31
33
|
|
|
34
|
+
def get_display_name(self, **kwargs):
|
|
35
|
+
return self.name
|
|
36
|
+
|
|
32
37
|
def delete_data(self):
|
|
33
38
|
self.data = None
|
|
34
39
|
|
|
@@ -157,6 +162,8 @@ class Feature:
|
|
|
157
162
|
else:
|
|
158
163
|
new_data = new_data.replace([-np.inf, np.inf], np.nan)
|
|
159
164
|
|
|
165
|
+
new_data = new_data.rename(self.get_display_name())
|
|
166
|
+
|
|
160
167
|
if is_root:
|
|
161
168
|
self.data = new_data
|
|
162
169
|
return new_data
|
|
@@ -326,3 +333,65 @@ class FeatureGroup:
|
|
|
326
333
|
self.main_column_node.delete_data()
|
|
327
334
|
for child in self.children:
|
|
328
335
|
child.delete_data()
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
class OperandGroup:
|
|
339
|
+
def __init__(self, operand: MultiOperand, children: List[Union[Column, Feature]]):
|
|
340
|
+
self.op = operand
|
|
341
|
+
self.children = children
|
|
342
|
+
self.data: Optional[pd.DataFrame] = None
|
|
343
|
+
|
|
344
|
+
def get_columns(self, **kwargs) -> List[str]:
|
|
345
|
+
column_list = []
|
|
346
|
+
seen = set()
|
|
347
|
+
for child in self.children:
|
|
348
|
+
columns = child.get_columns(**kwargs)
|
|
349
|
+
column_list.extend([f for f in columns if f not in seen])
|
|
350
|
+
seen.update(columns)
|
|
351
|
+
return column_list
|
|
352
|
+
|
|
353
|
+
def get_display_names(self, **kwargs) -> List[str]:
|
|
354
|
+
names = [Feature(op, self.children).get_display_name(**kwargs) for op in self.op.children]
|
|
355
|
+
return names
|
|
356
|
+
|
|
357
|
+
def calculate(self, data: pd.DataFrame, is_root=False) -> pd.DataFrame:
|
|
358
|
+
if isinstance(self.op, PandasOperand):
|
|
359
|
+
if self.op.is_vector:
|
|
360
|
+
ds = [child.calculate(data) for child in self.children]
|
|
361
|
+
new_data = self.op.calculate(data=ds)
|
|
362
|
+
else:
|
|
363
|
+
d1 = self.children[0].calculate(data)
|
|
364
|
+
d2 = None if len(self.children) < 2 else self.children[1].calculate(data)
|
|
365
|
+
new_data = self.op.calculate(data=d1, left=d1, right=d2)
|
|
366
|
+
|
|
367
|
+
new_data = pd.DataFrame(new_data.values.tolist())
|
|
368
|
+
new_data.columns = self.get_display_names()
|
|
369
|
+
else:
|
|
370
|
+
raise NotImplementedError(f"Unrecognized operator {self.op.name}.")
|
|
371
|
+
|
|
372
|
+
if is_root:
|
|
373
|
+
self.data = new_data
|
|
374
|
+
return new_data
|
|
375
|
+
|
|
376
|
+
@staticmethod
|
|
377
|
+
def make_groups(candidates: List[Feature]) -> List[Union[Feature, "FeatureGroup"]]:
|
|
378
|
+
grouped_features = []
|
|
379
|
+
|
|
380
|
+
for _, features in sorted(
|
|
381
|
+
map_reduce(
|
|
382
|
+
candidates, lambda f: (f.op.common_type or "", ",".join([c.get_display_name() for c in f.children]))
|
|
383
|
+
).items(),
|
|
384
|
+
key=operator.itemgetter(0),
|
|
385
|
+
):
|
|
386
|
+
feature_list = list(features)
|
|
387
|
+
multi_op = feature_list[0].op.make_multi_operand([f.op for f in feature_list])
|
|
388
|
+
if multi_op is not None:
|
|
389
|
+
grouped_features.append(OperandGroup(multi_op, feature_list[0].children))
|
|
390
|
+
else:
|
|
391
|
+
grouped_features.extend(feature_list)
|
|
392
|
+
return grouped_features
|
|
393
|
+
|
|
394
|
+
def delete_data(self):
|
|
395
|
+
self.data = None
|
|
396
|
+
for child in self.children:
|
|
397
|
+
child.delete_data()
|
|
@@ -5,6 +5,9 @@ import pandas as pd
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
MAIN_COLUMN = "main_column"
|
|
9
|
+
|
|
10
|
+
|
|
8
11
|
class Operand(BaseModel):
|
|
9
12
|
name: str
|
|
10
13
|
alias: Optional[str]
|
|
@@ -18,6 +21,7 @@ class Operand(BaseModel):
|
|
|
18
21
|
is_binary: bool = False
|
|
19
22
|
is_vector: bool = False
|
|
20
23
|
is_distribution_dependent: bool = False
|
|
24
|
+
common_type: Optional[str] = None
|
|
21
25
|
params: Optional[Dict[str, str]]
|
|
22
26
|
|
|
23
27
|
def set_params(self, params: Dict[str, str]):
|
|
@@ -27,8 +31,8 @@ class Operand(BaseModel):
|
|
|
27
31
|
def get_params(self) -> Dict[str, str]:
|
|
28
32
|
return self.params
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
def make_multi_operand(self, operands: List["Operand"]) -> Optional["MultiOperand"]:
|
|
35
|
+
return None
|
|
32
36
|
|
|
33
37
|
|
|
34
38
|
class PandasOperand(Operand, abc.ABC):
|
|
@@ -82,3 +86,7 @@ class VectorizableMixin(Operand):
|
|
|
82
86
|
value_columns = [col for col in input_columns if col != group_column]
|
|
83
87
|
|
|
84
88
|
return group_column, value_columns
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class MultiOperand(Operand):
|
|
92
|
+
children: List[Operand]
|
{upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/data_source/data_source_publisher.py
RENAMED
|
@@ -48,7 +48,6 @@ class DataSourcePublisher:
|
|
|
48
48
|
data_table_uri: str,
|
|
49
49
|
search_keys: Dict[str, SearchKey],
|
|
50
50
|
update_frequency: str,
|
|
51
|
-
exclude_from_autofe_generation: Optional[List[str]],
|
|
52
51
|
secondary_search_keys: Optional[Dict[str, SearchKey]] = None,
|
|
53
52
|
sort_column: Optional[str] = None,
|
|
54
53
|
date_format: Optional[str] = None,
|
|
@@ -58,6 +57,7 @@ class DataSourcePublisher:
|
|
|
58
57
|
join_date_abs_limit_days: Optional[int] = None,
|
|
59
58
|
features_for_embeddings: Optional[List[str]] = DEFAULT_GENERATE_EMBEDDINGS,
|
|
60
59
|
data_table_id_to_replace: Optional[str] = None,
|
|
60
|
+
exclude_from_autofe_generation: Optional[List[str]] = None,
|
|
61
61
|
_force_generation=False,
|
|
62
62
|
_silent=False,
|
|
63
63
|
) -> str:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import dataclasses
|
|
2
|
-
import datetime
|
|
3
2
|
import gc
|
|
4
3
|
import hashlib
|
|
5
4
|
import itertools
|
|
@@ -147,7 +146,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
147
146
|
"""
|
|
148
147
|
|
|
149
148
|
TARGET_NAME = "target"
|
|
150
|
-
CURRENT_DATE = "current_date"
|
|
151
149
|
RANDOM_STATE = 42
|
|
152
150
|
CALCULATE_METRICS_THRESHOLD = 50_000_000
|
|
153
151
|
CALCULATE_METRICS_MIN_THRESHOLD = 500
|
|
@@ -209,7 +207,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
209
207
|
client_ip: Optional[str] = None,
|
|
210
208
|
client_visitorid: Optional[str] = None,
|
|
211
209
|
custom_bundle_config: Optional[str] = None,
|
|
212
|
-
add_date_if_missing: bool = True,
|
|
213
210
|
**kwargs,
|
|
214
211
|
):
|
|
215
212
|
self.bundle = get_custom_bundle(custom_bundle_config)
|
|
@@ -320,7 +317,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
320
317
|
self.raise_validation_error = raise_validation_error
|
|
321
318
|
self.exclude_columns = exclude_columns
|
|
322
319
|
self.baseline_score_column = baseline_score_column
|
|
323
|
-
self.add_date_if_missing = add_date_if_missing
|
|
324
320
|
|
|
325
321
|
def _get_api_key(self):
|
|
326
322
|
return self._api_key
|
|
@@ -1808,11 +1804,10 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1808
1804
|
else:
|
|
1809
1805
|
features_section = ""
|
|
1810
1806
|
|
|
1811
|
-
|
|
1812
|
-
api_example = f"""curl 'https://search.upgini.com/online/api/http_inference_trigger?search_id={search_id}' \\
|
|
1807
|
+
api_example = f"""curl 'https://inference-upgini.azurewebsites.net/api/http_inference_trigger' \\
|
|
1813
1808
|
-H 'Authorization: {self.api_key}' \\
|
|
1814
1809
|
-H 'Content-Type: application/json' \\
|
|
1815
|
-
-d '{{"search_keys": {keys}{features_section}}}'"""
|
|
1810
|
+
-d '{{"search_id": "{self._search_task.search_task_id}", "search_keys": {keys}{features_section}}}'"""
|
|
1816
1811
|
return api_example
|
|
1817
1812
|
|
|
1818
1813
|
def _get_copy_of_runtime_parameters(self) -> RuntimeParameters:
|
|
@@ -1907,8 +1902,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
1907
1902
|
generated_features.extend(converter.generated_features)
|
|
1908
1903
|
else:
|
|
1909
1904
|
self.logger.info("Input dataset hasn't date column")
|
|
1910
|
-
if self.add_date_if_missing:
|
|
1911
|
-
df = self._add_current_date_as_key(df, search_keys, self.logger, self.bundle)
|
|
1912
1905
|
email_column = self._get_email_column(search_keys)
|
|
1913
1906
|
hem_column = self._get_hem_column(search_keys)
|
|
1914
1907
|
email_converted_to_hem = False
|
|
@@ -2227,7 +2220,9 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2227
2220
|
self.fit_search_keys = self.search_keys.copy()
|
|
2228
2221
|
self.fit_search_keys = self.__prepare_search_keys(validated_X, self.fit_search_keys, is_demo_dataset)
|
|
2229
2222
|
|
|
2230
|
-
validate_dates_distribution(
|
|
2223
|
+
validate_dates_distribution(
|
|
2224
|
+
validated_X, self.fit_search_keys, self.logger, self.bundle, self.warning_counter
|
|
2225
|
+
)
|
|
2231
2226
|
|
|
2232
2227
|
maybe_date_column = self._get_date_column(self.fit_search_keys)
|
|
2233
2228
|
has_date = maybe_date_column is not None
|
|
@@ -2278,8 +2273,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2278
2273
|
self.fit_generated_features.extend(converter.generated_features)
|
|
2279
2274
|
else:
|
|
2280
2275
|
self.logger.info("Input dataset hasn't date column")
|
|
2281
|
-
if self.add_date_if_missing:
|
|
2282
|
-
df = self._add_current_date_as_key(df, self.fit_search_keys, self.logger, self.bundle)
|
|
2283
2276
|
email_column = self._get_email_column(self.fit_search_keys)
|
|
2284
2277
|
hem_column = self._get_hem_column(self.fit_search_keys)
|
|
2285
2278
|
email_converted_to_hem = False
|
|
@@ -2860,25 +2853,6 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2860
2853
|
if t in [SearchKey.DATE, SearchKey.DATETIME]:
|
|
2861
2854
|
return col
|
|
2862
2855
|
|
|
2863
|
-
@staticmethod
|
|
2864
|
-
def _add_current_date_as_key(
|
|
2865
|
-
df: pd.DataFrame, search_keys: Dict[str, SearchKey], logger: logging.Logger, bundle: ResourceBundle
|
|
2866
|
-
) -> pd.DataFrame:
|
|
2867
|
-
if (
|
|
2868
|
-
set(search_keys.values()) == {SearchKey.PHONE}
|
|
2869
|
-
or set(search_keys.values()) == {SearchKey.EMAIL}
|
|
2870
|
-
or set(search_keys.values()) == {SearchKey.HEM}
|
|
2871
|
-
or set(search_keys.values()) == {SearchKey.COUNTRY, SearchKey.POSTAL_CODE}
|
|
2872
|
-
):
|
|
2873
|
-
msg = bundle.get("current_date_added")
|
|
2874
|
-
print(msg)
|
|
2875
|
-
logger.warning(msg)
|
|
2876
|
-
df[FeaturesEnricher.CURRENT_DATE] = datetime.date.today()
|
|
2877
|
-
search_keys[FeaturesEnricher.CURRENT_DATE] = SearchKey.DATE
|
|
2878
|
-
converter = DateTimeSearchKeyConverter(FeaturesEnricher.CURRENT_DATE, None, logger, bundle)
|
|
2879
|
-
df = converter.convert(df)
|
|
2880
|
-
return df
|
|
2881
|
-
|
|
2882
2856
|
@staticmethod
|
|
2883
2857
|
def _get_group_columns(df: pd.DataFrame, search_keys: Dict[str, SearchKey]) -> List[str]:
|
|
2884
2858
|
return [
|
|
@@ -2929,7 +2903,9 @@ class FeaturesEnricher(TransformerMixin):
|
|
|
2929
2903
|
[
|
|
2930
2904
|
c
|
|
2931
2905
|
for c in df.columns
|
|
2932
|
-
if c not in sort_columns
|
|
2906
|
+
if c not in sort_columns
|
|
2907
|
+
and c not in sort_exclude_columns
|
|
2908
|
+
and df[c].nunique() > 1
|
|
2933
2909
|
]
|
|
2934
2910
|
# [
|
|
2935
2911
|
# sk
|
|
@@ -645,7 +645,6 @@ class OtherEstimatorWrapper(EstimatorWrapper):
|
|
|
645
645
|
|
|
646
646
|
|
|
647
647
|
def validate_scoring_argument(scoring: Union[Callable, str, None]):
|
|
648
|
-
# TODO validate that if it is Callable then it accepts 3 arguments
|
|
649
648
|
if isinstance(scoring, str) and scoring is not None:
|
|
650
649
|
_get_scorer_by_name(scoring)
|
|
651
650
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
|
-
from pandas.api.types import is_float_dtype, is_int64_dtype, is_string_dtype
|
|
4
|
+
from pandas.api.types import is_float_dtype, is_int64_dtype, is_string_dtype
|
|
5
5
|
|
|
6
6
|
from upgini.errors import ValidationError
|
|
7
7
|
|
|
@@ -44,7 +44,7 @@ class PhoneNormalizer:
|
|
|
44
44
|
Method will remove all non numeric chars from string and convert it to int.
|
|
45
45
|
None will be set for phone numbers that couldn"t be converted to int
|
|
46
46
|
"""
|
|
47
|
-
if is_string_dtype(self.df[self.phone_column_name])
|
|
47
|
+
if is_string_dtype(self.df[self.phone_column_name]):
|
|
48
48
|
convert_func = self.phone_str_to_int_safe
|
|
49
49
|
elif is_float_dtype(self.df[self.phone_column_name]):
|
|
50
50
|
convert_func = self.phone_float_to_int_safe
|
{upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/strings.properties
RENAMED
|
@@ -38,7 +38,6 @@ loss_selection_warn=\nWARNING: Loss `{0}` is not supported for feature selection
|
|
|
38
38
|
loss_calc_metrics_warn=\nWARNING: Loss `{0}` is not supported for metrics calculation with {1}
|
|
39
39
|
multivariate_timeseries_detected=\nWARNING: Multivariate TimeSeries detected. Blocked time series cross-validation split selected.\nMore details: https://github.com/upgini/upgini#-time-series-prediction-support
|
|
40
40
|
group_k_fold_in_classification=\nWARNING: Using group K-fold cross-validation split for classification task.
|
|
41
|
-
current_date_added=\nWARNING: No date/datetime column was detected in X to be used as a search key. The current date will be used to match the latest version of data sources
|
|
42
41
|
|
|
43
42
|
# Errors
|
|
44
43
|
failed_search_by_task_id=Failed to retrieve the specified search results
|
|
@@ -100,9 +100,6 @@ class DateTimeSearchKeyConverter:
|
|
|
100
100
|
msg = self.bundle.get("unsupported_date_type").format(self.date_column)
|
|
101
101
|
self.logger.warning(msg)
|
|
102
102
|
raise ValidationError(msg)
|
|
103
|
-
else:
|
|
104
|
-
df[self.date_column] = df[self.date_column].astype("string").apply(self.clean_date)
|
|
105
|
-
df[self.date_column] = self.parse_date(df)
|
|
106
103
|
|
|
107
104
|
# If column with date is datetime then extract seconds of the day and minute of the hour
|
|
108
105
|
# as additional features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: upgini
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.274a3388.post2
|
|
4
4
|
Summary: Intelligent data search & enrichment for Machine Learning
|
|
5
5
|
Home-page: https://upgini.com/
|
|
6
6
|
Author: Upgini Developers
|
|
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: python-dateutil>=2.8.0
|
|
30
30
|
Requires-Dist: requests>=2.8.0
|
|
31
|
-
Requires-Dist: pandas<2.
|
|
31
|
+
Requires-Dist: pandas<2.0.0,>=1.1.0
|
|
32
32
|
Requires-Dist: numpy>=1.19.0
|
|
33
33
|
Requires-Dist: scikit-learn>=1.3.0
|
|
34
34
|
Requires-Dist: pydantic<2.0.0,>=1.8.2
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
from more_itertools import ilen
|
|
1
2
|
import pandas as pd
|
|
3
|
+
from upgini.autofe.binary import Divide, Multiply
|
|
2
4
|
from upgini.autofe.date import DateDiff, DateDiffType2, DateListDiff, DateListDiffBounded
|
|
3
5
|
|
|
4
6
|
from datetime import datetime
|
|
5
7
|
from pandas.testing import assert_series_equal
|
|
6
8
|
|
|
9
|
+
from upgini.autofe.feature import Column, Feature, OperandGroup
|
|
10
|
+
|
|
7
11
|
|
|
8
12
|
def test_date_diff():
|
|
9
13
|
df = pd.DataFrame(
|
|
@@ -30,8 +34,7 @@ def test_date_diff_type2():
|
|
|
30
34
|
|
|
31
35
|
operand = DateDiffType2(left_unit="s")
|
|
32
36
|
expected_result = pd.Series([61.0, 182.0])
|
|
33
|
-
|
|
34
|
-
assert_series_equal(actual, expected_result)
|
|
37
|
+
assert_series_equal(operand.calculate_binary(df.date1, df.date2), expected_result)
|
|
35
38
|
|
|
36
39
|
|
|
37
40
|
def test_date_diff_list():
|
|
@@ -92,3 +95,42 @@ def test_date_diff_list_bounded():
|
|
|
92
95
|
check_num_by_years(30, 45, "date_diff_Y_30_45_count", pd.Series([0, 1, 0, 0, 0]))
|
|
93
96
|
check_num_by_years(45, 60, "date_diff_Y_45_60_count", pd.Series([0, 1, 0, 0, 0]))
|
|
94
97
|
check_num_by_years(60, None, "date_diff_Y_60_plusinf_count", pd.Series([0, 1, 0, 0, 0]))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_operand_group():
|
|
101
|
+
features = [
|
|
102
|
+
Feature(op=DateDiff(right_unit="s"), children=[Column("a"), Column("b")]),
|
|
103
|
+
Feature(op=DateDiff(right_unit="ms"), children=[Column("a"), Column("b")]),
|
|
104
|
+
Feature(op=DateListDiff(aggregation="min"), children=[Column("a"), Column("c")]),
|
|
105
|
+
Feature(
|
|
106
|
+
op=DateListDiffBounded(diff_unit="Y", aggregation="count", lower_bound=0, upper_bound=18),
|
|
107
|
+
children=[Column("a"), Column("c")],
|
|
108
|
+
),
|
|
109
|
+
Feature(op=Divide(), children=[Column("a"), Column("b")]),
|
|
110
|
+
Feature(op=Multiply(), children=[Column("a"), Column("b")]),
|
|
111
|
+
Feature(op=Divide(), children=[Column("a"), Column("c")]),
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
groups = OperandGroup.make_groups(features)
|
|
115
|
+
|
|
116
|
+
assert len(groups) == 6
|
|
117
|
+
assert ilen(g for g in groups if isinstance(g, OperandGroup)) == 1
|
|
118
|
+
|
|
119
|
+
for g in groups:
|
|
120
|
+
if isinstance(g, OperandGroup):
|
|
121
|
+
df = pd.DataFrame(
|
|
122
|
+
[
|
|
123
|
+
["2022-10-10", ["1993-12-10", "2000-12-11"]],
|
|
124
|
+
["2022-10-10", ["2023-10-10"]],
|
|
125
|
+
],
|
|
126
|
+
columns=["a", "c"],
|
|
127
|
+
)
|
|
128
|
+
group_res = g.calculate(df)
|
|
129
|
+
assert_series_equal(
|
|
130
|
+
group_res[features[2].get_display_name()],
|
|
131
|
+
features[2].calculate(df),
|
|
132
|
+
)
|
|
133
|
+
assert_series_equal(
|
|
134
|
+
group_res[features[3].get_display_name()],
|
|
135
|
+
features[3].calculate(df),
|
|
136
|
+
)
|
|
@@ -246,7 +246,7 @@ def test_eval_set_with_diff_order_of_columns(requests_mock: Mocker):
|
|
|
246
246
|
eval1_df = df[10000:11000].reset_index(drop=True)
|
|
247
247
|
eval1_features = eval1_df.drop(columns="target")
|
|
248
248
|
# shuffle columns
|
|
249
|
-
eval1_features = eval1_features[
|
|
249
|
+
eval1_features = eval1_features[set(eval1_features.columns)]
|
|
250
250
|
eval1_target = eval1_df["target"].reset_index(drop=True)
|
|
251
251
|
|
|
252
252
|
eval2_df = df[11000:12000]
|
|
@@ -375,7 +375,7 @@ def test_saved_features_enricher(requests_mock: Mocker):
|
|
|
375
375
|
url = "http://fake_url2"
|
|
376
376
|
|
|
377
377
|
path_to_mock_features = os.path.join(
|
|
378
|
-
os.path.dirname(os.path.realpath(__file__)), "test_data/binary/
|
|
378
|
+
os.path.dirname(os.path.realpath(__file__)), "test_data/binary/validation_features.parquet"
|
|
379
379
|
)
|
|
380
380
|
|
|
381
381
|
mock_default_requests(requests_mock, url)
|
|
@@ -462,7 +462,7 @@ def test_saved_features_enricher(requests_mock: Mocker):
|
|
|
462
462
|
segment_header: [train_segment, eval_1_segment, eval_2_segment],
|
|
463
463
|
rows_header: [10000, 1000, 1000],
|
|
464
464
|
target_mean_header: [0.5044, 0.487, 0.486],
|
|
465
|
-
enriched_gini: [0.
|
|
465
|
+
enriched_gini: [-0.000136, 0.000000, -0.003728],
|
|
466
466
|
}
|
|
467
467
|
)
|
|
468
468
|
print("Expected metrics: ")
|
|
@@ -487,13 +487,16 @@ def test_saved_features_enricher(requests_mock: Mocker):
|
|
|
487
487
|
train_random_indices = random.choice(train_target.index, size=9000, replace=False)
|
|
488
488
|
train_target.loc[train_random_indices] = 0
|
|
489
489
|
|
|
490
|
-
metrics = enricher.calculate_metrics(
|
|
490
|
+
metrics = enricher.calculate_metrics(
|
|
491
|
+
train_features,
|
|
492
|
+
train_target
|
|
493
|
+
)
|
|
491
494
|
expected_metrics = pd.DataFrame(
|
|
492
495
|
{
|
|
493
496
|
segment_header: [train_segment],
|
|
494
497
|
rows_header: [10000],
|
|
495
498
|
target_mean_header: [0.049],
|
|
496
|
-
enriched_gini: [0.
|
|
499
|
+
enriched_gini: [0.000985],
|
|
497
500
|
}
|
|
498
501
|
)
|
|
499
502
|
print("Expected metrics: ")
|
|
@@ -2227,9 +2230,8 @@ def test_email_search_key(requests_mock: Mocker):
|
|
|
2227
2230
|
"hashed_email_64ff8c",
|
|
2228
2231
|
"email_one_domain_3b0a68",
|
|
2229
2232
|
"email_domain_10c73f",
|
|
2230
|
-
"current_date_b993c4",
|
|
2231
2233
|
}
|
|
2232
|
-
assert {"hashed_email_64ff8c", "email_one_domain_3b0a68"
|
|
2234
|
+
assert {"hashed_email_64ff8c", "email_one_domain_3b0a68"} == {
|
|
2233
2235
|
sk for sublist in self.search_keys for sk in sublist
|
|
2234
2236
|
}
|
|
2235
2237
|
raise TestException()
|
|
@@ -2274,18 +2276,10 @@ def test_composit_index_search_key(requests_mock: Mocker):
|
|
|
2274
2276
|
**kwargs,
|
|
2275
2277
|
):
|
|
2276
2278
|
self.validate()
|
|
2277
|
-
assert set(self.columns.to_list()) == {
|
|
2278
|
-
"system_record_id",
|
|
2279
|
-
"country_aff64e",
|
|
2280
|
-
"postal_code_13534a",
|
|
2281
|
-
"current_date_b993c4",
|
|
2282
|
-
"target",
|
|
2283
|
-
}
|
|
2279
|
+
assert set(self.columns.to_list()) == {"system_record_id", "country_aff64e", "postal_code_13534a", "target"}
|
|
2284
2280
|
assert "country_aff64e" in self.columns
|
|
2285
2281
|
assert "postal_code_13534a"
|
|
2286
|
-
assert {"country_aff64e", "postal_code_13534a"
|
|
2287
|
-
sk for sublist in self.search_keys for sk in sublist
|
|
2288
|
-
}
|
|
2282
|
+
assert {"country_aff64e", "postal_code_13534a"} == {sk for sublist in self.search_keys for sk in sublist}
|
|
2289
2283
|
# assert "country_fake_a" in self.columns
|
|
2290
2284
|
# assert "postal_code_fake_a" in self.columns
|
|
2291
2285
|
# assert {"country_fake_a", "postal_code_fake_a"} == {sk for sublist in self.search_keys for sk in sublist}
|
|
@@ -2658,4 +2652,5 @@ class DataFrameWrapper:
|
|
|
2658
2652
|
|
|
2659
2653
|
|
|
2660
2654
|
class TestException(Exception):
|
|
2661
|
-
|
|
2655
|
+
def __init__(self):
|
|
2656
|
+
super().__init__()
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FingerprintJS v3.4.2 - Copyright (c) FingerprintJS, Inc, 2023 (https://fingerprint.com)
|
|
3
|
-
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
|
|
4
|
-
*
|
|
5
|
-
* This software contains code from open-source projects:
|
|
6
|
-
* MurmurHash3 by Karan Lyons (https://github.com/karanlyons/murmurHash3.js)
|
|
7
|
-
*/
|
|
8
|
-
var e=function(){return e=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e},e.apply(this,arguments)};function n(e,n,t,r){return new(t||(t=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(n){a(n)}}function c(e){try{u(r.throw(e))}catch(n){a(n)}}function u(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,c)}u((r=r.apply(e,n||[])).next())}))}function t(e,n){var t,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=n.call(e,i)}catch(u){c=[6,u],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}function r(e,n,t){if(t||2===arguments.length)for(var r,o=0,a=n.length;o<a;o++)!r&&o in n||(r||(r=Array.prototype.slice.call(n,0,o)),r[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))}function o(e,n){return new Promise((function(t){return setTimeout(t,e,n)}))}function a(e){return!!e&&"function"==typeof e.then}function i(e,n){try{var t=e();a(t)?t.then((function(e){return n(!0,e)}),(function(e){return n(!1,e)})):n(!0,t)}catch(r){n(!1,r)}}function c(e,r,a){return void 0===a&&(a=16),n(this,void 0,void 0,(function(){var n,i,c,u;return t(this,(function(t){switch(t.label){case 0:n=Array(e.length),i=Date.now(),c=0,t.label=1;case 1:return c<e.length?(n[c]=r(e[c],c),(u=Date.now())>=i+a?(i=u,[4,o(0)]):[3,3]):[3,4];case 2:t.sent(),t.label=3;case 3:return++c,[3,1];case 4:return[2,n]}}))}))}function u(e){e.then(void 0,(function(){}))}function l(e,n){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],n=[n[0]>>>16,65535&n[0],n[1]>>>16,65535&n[1]];var t=[0,0,0,0];return t[3]+=e[3]+n[3],t[2]+=t[3]>>>16,t[3]&=65535,t[2]+=e[2]+n[2],t[1]+=t[2]>>>16,t[2]&=65535,t[1]+=e[1]+n[1],t[0]+=t[1]>>>16,t[1]&=65535,t[0]+=e[0]+n[0],t[0]&=65535,[t[0]<<16|t[1],t[2]<<16|t[3]]}function s(e,n){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],n=[n[0]>>>16,65535&n[0],n[1]>>>16,65535&n[1]];var t=[0,0,0,0];return t[3]+=e[3]*n[3],t[2]+=t[3]>>>16,t[3]&=65535,t[2]+=e[2]*n[3],t[1]+=t[2]>>>16,t[2]&=65535,t[2]+=e[3]*n[2],t[1]+=t[2]>>>16,t[2]&=65535,t[1]+=e[1]*n[3],t[0]+=t[1]>>>16,t[1]&=65535,t[1]+=e[2]*n[2],t[0]+=t[1]>>>16,t[1]&=65535,t[1]+=e[3]*n[1],t[0]+=t[1]>>>16,t[1]&=65535,t[0]+=e[0]*n[3]+e[1]*n[2]+e[2]*n[1]+e[3]*n[0],t[0]&=65535,[t[0]<<16|t[1],t[2]<<16|t[3]]}function d(e,n){return 32===(n%=64)?[e[1],e[0]]:n<32?[e[0]<<n|e[1]>>>32-n,e[1]<<n|e[0]>>>32-n]:(n-=32,[e[1]<<n|e[0]>>>32-n,e[0]<<n|e[1]>>>32-n])}function m(e,n){return 0===(n%=64)?e:n<32?[e[0]<<n|e[1]>>>32-n,e[1]<<n]:[e[1]<<n-32,0]}function f(e,n){return[e[0]^n[0],e[1]^n[1]]}function v(e){return e=f(e,[0,e[0]>>>1]),e=f(e=s(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=f(e=s(e,[3301882366,444984403]),[0,e[0]>>>1])}function h(e,n){n=n||0;var t,r=(e=e||"").length%16,o=e.length-r,a=[0,n],i=[0,n],c=[0,0],u=[0,0],h=[2277735313,289559509],p=[1291169091,658871167];for(t=0;t<o;t+=16)c=[255&e.charCodeAt(t+4)|(255&e.charCodeAt(t+5))<<8|(255&e.charCodeAt(t+6))<<16|(255&e.charCodeAt(t+7))<<24,255&e.charCodeAt(t)|(255&e.charCodeAt(t+1))<<8|(255&e.charCodeAt(t+2))<<16|(255&e.charCodeAt(t+3))<<24],u=[255&e.charCodeAt(t+12)|(255&e.charCodeAt(t+13))<<8|(255&e.charCodeAt(t+14))<<16|(255&e.charCodeAt(t+15))<<24,255&e.charCodeAt(t+8)|(255&e.charCodeAt(t+9))<<8|(255&e.charCodeAt(t+10))<<16|(255&e.charCodeAt(t+11))<<24],c=d(c=s(c,h),31),a=l(a=d(a=f(a,c=s(c,p)),27),i),a=l(s(a,[0,5]),[0,1390208809]),u=d(u=s(u,p),33),i=l(i=d(i=f(i,u=s(u,h)),31),a),i=l(s(i,[0,5]),[0,944331445]);switch(c=[0,0],u=[0,0],r){case 15:u=f(u,m([0,e.charCodeAt(t+14)],48));case 14:u=f(u,m([0,e.charCodeAt(t+13)],40));case 13:u=f(u,m([0,e.charCodeAt(t+12)],32));case 12:u=f(u,m([0,e.charCodeAt(t+11)],24));case 11:u=f(u,m([0,e.charCodeAt(t+10)],16));case 10:u=f(u,m([0,e.charCodeAt(t+9)],8));case 9:u=s(u=f(u,[0,e.charCodeAt(t+8)]),p),i=f(i,u=s(u=d(u,33),h));case 8:c=f(c,m([0,e.charCodeAt(t+7)],56));case 7:c=f(c,m([0,e.charCodeAt(t+6)],48));case 6:c=f(c,m([0,e.charCodeAt(t+5)],40));case 5:c=f(c,m([0,e.charCodeAt(t+4)],32));case 4:c=f(c,m([0,e.charCodeAt(t+3)],24));case 3:c=f(c,m([0,e.charCodeAt(t+2)],16));case 2:c=f(c,m([0,e.charCodeAt(t+1)],8));case 1:c=s(c=f(c,[0,e.charCodeAt(t)]),h),a=f(a,c=s(c=d(c,31),p))}return a=l(a=f(a,[0,e.length]),i=f(i,[0,e.length])),i=l(i,a),a=l(a=v(a),i=v(i)),i=l(i,a),("00000000"+(a[0]>>>0).toString(16)).slice(-8)+("00000000"+(a[1]>>>0).toString(16)).slice(-8)+("00000000"+(i[0]>>>0).toString(16)).slice(-8)+("00000000"+(i[1]>>>0).toString(16)).slice(-8)}function p(e){return parseInt(e)}function b(e){return parseFloat(e)}function y(e,n){return"number"==typeof e&&isNaN(e)?n:e}function g(e){return e.reduce((function(e,n){return e+(n?1:0)}),0)}function w(e,n){if(void 0===n&&(n=1),Math.abs(n)>=1)return Math.round(e/n)*n;var t=1/n;return Math.round(e*t)/t}function L(e){return e&&"object"==typeof e&&"message"in e?e:{message:e}}function k(e){return"function"!=typeof e}function V(e,r,o){var a=Object.keys(e).filter((function(e){return!function(e,n){for(var t=0,r=e.length;t<r;++t)if(e[t]===n)return!0;return!1}(o,e)})),l=c(a,(function(n){return function(e,n){var t=new Promise((function(t){var r=Date.now();i(e.bind(null,n),(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var o=Date.now()-r;if(!e[0])return t((function(){return{error:L(e[1]),duration:o}}));var a=e[1];if(k(a))return t((function(){return{value:a,duration:o}}));t((function(){return new Promise((function(e){var n=Date.now();i(a,(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var a=o+Date.now()-n;if(!t[0])return e({error:L(t[1]),duration:a});e({value:t[1],duration:a})}))}))}))}))}));return u(t),function(){return t.then((function(e){return e()}))}}(e[n],r)}));return u(l),function(){return n(this,void 0,void 0,(function(){var e,n,r,o;return t(this,(function(t){switch(t.label){case 0:return[4,l];case 1:return[4,c(t.sent(),(function(e){var n=e();return u(n),n}))];case 2:return e=t.sent(),[4,Promise.all(e)];case 3:for(n=t.sent(),r={},o=0;o<a.length;++o)r[a[o]]=n[o];return[2,r]}}))}))}}function Z(e,n){var t=function(e){return k(e)?n(e):function(){var t=e();return a(t)?t.then(n):n(t)}};return function(n){var r=e(n);return a(r)?r.then(t):t(r)}}function W(){var e=window,n=navigator;return g(["MSCSSMatrix"in e,"msSetImmediate"in e,"msIndexedDB"in e,"msMaxTouchPoints"in n,"msPointerEnabled"in n])>=4}function C(){var e=window,n=navigator;return g(["msWriteProfilerMark"in e,"MSStream"in e,"msLaunchUri"in n,"msSaveBlob"in n])>=3&&!W()}function S(){var e=window,n=navigator;return g(["webkitPersistentStorage"in n,"webkitTemporaryStorage"in n,0===n.vendor.indexOf("Google"),"webkitResolveLocalFileSystemURL"in e,"BatteryManager"in e,"webkitMediaStream"in e,"webkitSpeechGrammar"in e])>=5}function x(){var e=window,n=navigator;return g(["ApplePayError"in e,"CSSPrimitiveValue"in e,"Counter"in e,0===n.vendor.indexOf("Apple"),"getStorageUpdates"in n,"WebKitMediaKeys"in e])>=4}function F(){var e=window;return g(["safari"in e,!("DeviceMotionEvent"in e),!("ongestureend"in e),!("standalone"in navigator)])>=3}function Y(){var e,n,t=window;return g(["buildID"in navigator,"MozAppearance"in(null!==(n=null===(e=document.documentElement)||void 0===e?void 0:e.style)&&void 0!==n?n:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4}function M(){var e=document;return e.fullscreenElement||e.msFullscreenElement||e.mozFullScreenElement||e.webkitFullscreenElement||null}function G(){var e=S(),n=Y();if(!e&&!n)return!1;var t=window;return g(["onorientationchange"in t,"orientation"in t,e&&!("SharedWorker"in t),n&&/android/i.test(navigator.appVersion)])>=2}function R(e){var n=new Error(e);return n.name=e,n}function X(e,r,a){var i,c,u;return void 0===a&&(a=50),n(this,void 0,void 0,(function(){var n,l;return t(this,(function(t){switch(t.label){case 0:n=document,t.label=1;case 1:return n.body?[3,3]:[4,o(a)];case 2:return t.sent(),[3,1];case 3:l=n.createElement("iframe"),t.label=4;case 4:return t.trys.push([4,,10,11]),[4,new Promise((function(e,t){var o=!1,a=function(){o=!0,e()};l.onload=a,l.onerror=function(e){o=!0,t(e)};var i=l.style;i.setProperty("display","block","important"),i.position="absolute",i.top="0",i.left="0",i.visibility="hidden",r&&"srcdoc"in l?l.srcdoc=r:l.src="about:blank",n.body.appendChild(l);var c=function(){var e,n;o||("complete"===(null===(n=null===(e=l.contentWindow)||void 0===e?void 0:e.document)||void 0===n?void 0:n.readyState)?a():setTimeout(c,10))};c()}))];case 5:t.sent(),t.label=6;case 6:return(null===(c=null===(i=l.contentWindow)||void 0===i?void 0:i.document)||void 0===c?void 0:c.body)?[3,8]:[4,o(a)];case 7:return t.sent(),[3,6];case 8:return[4,e(l,l.contentWindow)];case 9:return[2,t.sent()];case 10:return null===(u=l.parentNode)||void 0===u||u.removeChild(l),[7];case 11:return[2]}}))}))}function A(e){for(var n=function(e){for(var n,t,r="Unexpected syntax '".concat(e,"'"),o=/^\s*([a-z-]*)(.*)$/i.exec(e),a=o[1]||void 0,i={},c=/([.:#][\w-]+|\[.+?\])/gi,u=function(e,n){i[e]=i[e]||[],i[e].push(n)};;){var l=c.exec(o[2]);if(!l)break;var s=l[0];switch(s[0]){case".":u("class",s.slice(1));break;case"#":u("id",s.slice(1));break;case"[":var d=/^\[([\w-]+)([~|^$*]?=("(.*?)"|([\w-]+)))?(\s+[is])?\]$/.exec(s);if(!d)throw new Error(r);u(d[1],null!==(t=null!==(n=d[4])&&void 0!==n?n:d[5])&&void 0!==t?t:"");break;default:throw new Error(r)}}return[a,i]}(e),t=n[0],r=n[1],o=document.createElement(null!=t?t:"div"),a=0,i=Object.keys(r);a<i.length;a++){var c=i[a],u=r[c].join(" ");"style"===c?j(o.style,u):o.setAttribute(c,u)}return o}function j(e,n){for(var t=0,r=n.split(";");t<r.length;t++){var o=r[t],a=/^\s*([\w-]+)\s*:\s*(.+?)(\s*!([\w-]+))?\s*$/.exec(o);if(a){var i=a[1],c=a[2],u=a[4];e.setProperty(i,c,u||"")}}}var I=["monospace","sans-serif","serif"],J=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"];function H(e){return e.toDataURL()}var P,N;function z(){var e=this;return function(){if(void 0===N){var e=function(){var n=D();E(n)?N=setTimeout(e,2500):(P=n,N=void 0)};e()}}(),function(){return n(e,void 0,void 0,(function(){var e;return t(this,(function(n){switch(n.label){case 0:return E(e=D())?P?[2,r([],P,!0)]:M()?[4,(t=document,(t.exitFullscreen||t.msExitFullscreen||t.mozCancelFullScreen||t.webkitExitFullscreen).call(t))]:[3,2]:[3,2];case 1:n.sent(),e=D(),n.label=2;case 2:return E(e)||(P=e),[2,e]}var t}))}))}}function D(){var e=screen;return[y(b(e.availTop),null),y(b(e.width)-b(e.availWidth)-y(b(e.availLeft),0),null),y(b(e.height)-b(e.availHeight)-y(b(e.availTop),0),null),y(b(e.availLeft),null)]}function E(e){for(var n=0;n<4;++n)if(e[n])return!1;return!0}function T(e){var r;return n(this,void 0,void 0,(function(){var n,a,i,c,u,l,s;return t(this,(function(t){switch(t.label){case 0:for(n=document,a=n.createElement("div"),i=new Array(e.length),c={},B(a),s=0;s<e.length;++s)"DIALOG"===(u=A(e[s])).tagName&&u.show(),B(l=n.createElement("div")),l.appendChild(u),a.appendChild(l),i[s]=u;t.label=1;case 1:return n.body?[3,3]:[4,o(50)];case 2:return t.sent(),[3,1];case 3:n.body.appendChild(a);try{for(s=0;s<e.length;++s)i[s].offsetParent||(c[e[s]]=!0)}finally{null===(r=a.parentNode)||void 0===r||r.removeChild(a)}return[2,c]}}))}))}function B(e){e.style.setProperty("display","block","important")}function _(e){return matchMedia("(inverted-colors: ".concat(e,")")).matches}function O(e){return matchMedia("(forced-colors: ".concat(e,")")).matches}function U(e){return matchMedia("(prefers-contrast: ".concat(e,")")).matches}function Q(e){return matchMedia("(prefers-reduced-motion: ".concat(e,")")).matches}function K(e){return matchMedia("(dynamic-range: ".concat(e,")")).matches}var q=Math,$=function(){return 0};var ee={default:[],apple:[{font:"-apple-system-body"}],serif:[{fontFamily:"serif"}],sans:[{fontFamily:"sans-serif"}],mono:[{fontFamily:"monospace"}],min:[{fontSize:"1px"}],system:[{fontFamily:"system-ui"}]};var ne={fonts:function(){return X((function(e,n){var t=n.document,r=t.body;r.style.fontSize="48px";var o=t.createElement("div"),a={},i={},c=function(e){var n=t.createElement("span"),r=n.style;return r.position="absolute",r.top="0",r.left="0",r.fontFamily=e,n.textContent="mmMwWLliI0O&1",o.appendChild(n),n},u=I.map(c),l=function(){for(var e={},n=function(n){e[n]=I.map((function(e){return function(e,n){return c("'".concat(e,"',").concat(n))}(n,e)}))},t=0,r=J;t<r.length;t++){n(r[t])}return e}();r.appendChild(o);for(var s=0;s<I.length;s++)a[I[s]]=u[s].offsetWidth,i[I[s]]=u[s].offsetHeight;return J.filter((function(e){return n=l[e],I.some((function(e,t){return n[t].offsetWidth!==a[e]||n[t].offsetHeight!==i[e]}));var n}))}))},domBlockers:function(e){var r=(void 0===e?{}:e).debug;return n(this,void 0,void 0,(function(){var e,n,o,a,i;return t(this,(function(t){switch(t.label){case 0:return x()||G()?(c=atob,e={abpIndo:["#Iklan-Melayang","#Kolom-Iklan-728","#SidebarIklan-wrapper",'[title="ALIENBOLA" i]',c("I0JveC1CYW5uZXItYWRz")],abpvn:[".quangcao","#mobileCatfish",c("LmNsb3NlLWFkcw=="),'[id^="bn_bottom_fixed_"]',"#pmadv"],adBlockFinland:[".mainostila",c("LnNwb25zb3JpdA=="),".ylamainos",c("YVtocmVmKj0iL2NsaWNrdGhyZ2guYXNwPyJd"),c("YVtocmVmXj0iaHR0cHM6Ly9hcHAucmVhZHBlYWsuY29tL2FkcyJd")],adBlockPersian:["#navbar_notice_50",".kadr",'TABLE[width="140px"]',"#divAgahi",c("YVtocmVmXj0iaHR0cDovL2cxLnYuZndtcm0ubmV0L2FkLyJd")],adBlockWarningRemoval:["#adblock-honeypot",".adblocker-root",".wp_adblock_detect",c("LmhlYWRlci1ibG9ja2VkLWFk"),c("I2FkX2Jsb2NrZXI=")],adGuardAnnoyances:[".hs-sosyal","#cookieconsentdiv",'div[class^="app_gdpr"]',".as-oil",'[data-cypress="soft-push-notification-modal"]'],adGuardBase:[".BetterJsPopOverlay",c("I2FkXzMwMFgyNTA="),c("I2Jhbm5lcmZsb2F0MjI="),c("I2NhbXBhaWduLWJhbm5lcg=="),c("I0FkLUNvbnRlbnQ=")],adGuardChinese:[c("LlppX2FkX2FfSA=="),c("YVtocmVmKj0iLmh0aGJldDM0LmNvbSJd"),"#widget-quan",c("YVtocmVmKj0iLzg0OTkyMDIwLnh5eiJd"),c("YVtocmVmKj0iLjE5NTZobC5jb20vIl0=")],adGuardFrench:["#pavePub",c("LmFkLWRlc2t0b3AtcmVjdGFuZ2xl"),".mobile_adhesion",".widgetadv",c("LmFkc19iYW4=")],adGuardGerman:['aside[data-portal-id="leaderboard"]'],adGuardJapanese:["#kauli_yad_1",c("YVtocmVmXj0iaHR0cDovL2FkMi50cmFmZmljZ2F0ZS5uZXQvIl0="),c("Ll9wb3BJbl9pbmZpbml0ZV9hZA=="),c("LmFkZ29vZ2xl"),c("Ll9faXNib29zdFJldHVybkFk")],adGuardMobile:[c("YW1wLWF1dG8tYWRz"),c("LmFtcF9hZA=="),'amp-embed[type="24smi"]',"#mgid_iframe1",c("I2FkX2ludmlld19hcmVh")],adGuardRussian:[c("YVtocmVmXj0iaHR0cHM6Ly9hZC5sZXRtZWFkcy5jb20vIl0="),c("LnJlY2xhbWE="),'div[id^="smi2adblock"]',c("ZGl2W2lkXj0iQWRGb3hfYmFubmVyXyJd"),"#psyduckpockeball"],adGuardSocial:[c("YVtocmVmXj0iLy93d3cuc3R1bWJsZXVwb24uY29tL3N1Ym1pdD91cmw9Il0="),c("YVtocmVmXj0iLy90ZWxlZ3JhbS5tZS9zaGFyZS91cmw/Il0="),".etsy-tweet","#inlineShare",".popup-social"],adGuardSpanishPortuguese:["#barraPublicidade","#Publicidade","#publiEspecial","#queTooltip",".cnt-publi"],adGuardTrackingProtection:["#qoo-counter",c("YVtocmVmXj0iaHR0cDovL2NsaWNrLmhvdGxvZy5ydS8iXQ=="),c("YVtocmVmXj0iaHR0cDovL2hpdGNvdW50ZXIucnUvdG9wL3N0YXQucGhwIl0="),c("YVtocmVmXj0iaHR0cDovL3RvcC5tYWlsLnJ1L2p1bXAiXQ=="),"#top100counter"],adGuardTurkish:["#backkapat",c("I3Jla2xhbWk="),c("YVtocmVmXj0iaHR0cDovL2Fkc2Vydi5vbnRlay5jb20udHIvIl0="),c("YVtocmVmXj0iaHR0cDovL2l6bGVuemkuY29tL2NhbXBhaWduLyJd"),c("YVtocmVmXj0iaHR0cDovL3d3dy5pbnN0YWxsYWRzLm5ldC8iXQ==")],bulgarian:[c("dGQjZnJlZW5ldF90YWJsZV9hZHM="),"#ea_intext_div",".lapni-pop-over","#xenium_hot_offers"],easyList:[".yb-floorad",c("LndpZGdldF9wb19hZHNfd2lkZ2V0"),c("LnRyYWZmaWNqdW5reS1hZA=="),".textad_headline",c("LnNwb25zb3JlZC10ZXh0LWxpbmtz")],easyListChina:[c("LmFwcGd1aWRlLXdyYXBbb25jbGljayo9ImJjZWJvcy5jb20iXQ=="),c("LmZyb250cGFnZUFkdk0="),"#taotaole","#aafoot.top_box",".cfa_popup"],easyListCookie:[".ezmob-footer",".cc-CookieWarning","[data-cookie-number]",c("LmF3LWNvb2tpZS1iYW5uZXI="),".sygnal24-gdpr-modal-wrap"],easyListCzechSlovak:["#onlajny-stickers",c("I3Jla2xhbW5pLWJveA=="),c("LnJla2xhbWEtbWVnYWJvYXJk"),".sklik",c("W2lkXj0ic2tsaWtSZWtsYW1hIl0=")],easyListDutch:[c("I2FkdmVydGVudGll"),c("I3ZpcEFkbWFya3RCYW5uZXJCbG9jaw=="),".adstekst",c("YVtocmVmXj0iaHR0cHM6Ly94bHR1YmUubmwvY2xpY2svIl0="),"#semilo-lrectangle"],easyListGermany:["#SSpotIMPopSlider",c("LnNwb25zb3JsaW5rZ3J1ZW4="),c("I3dlcmJ1bmdza3k="),c("I3Jla2xhbWUtcmVjaHRzLW1pdHRl"),c("YVtocmVmXj0iaHR0cHM6Ly9iZDc0Mi5jb20vIl0=")],easyListItaly:[c("LmJveF9hZHZfYW5udW5jaQ=="),".sb-box-pubbliredazionale",c("YVtocmVmXj0iaHR0cDovL2FmZmlsaWF6aW9uaWFkcy5zbmFpLml0LyJd"),c("YVtocmVmXj0iaHR0cHM6Ly9hZHNlcnZlci5odG1sLml0LyJd"),c("YVtocmVmXj0iaHR0cHM6Ly9hZmZpbGlhemlvbmlhZHMuc25haS5pdC8iXQ==")],easyListLithuania:[c("LnJla2xhbW9zX3RhcnBhcw=="),c("LnJla2xhbW9zX251b3JvZG9z"),c("aW1nW2FsdD0iUmVrbGFtaW5pcyBza3lkZWxpcyJd"),c("aW1nW2FsdD0iRGVkaWt1b3RpLmx0IHNlcnZlcmlhaSJd"),c("aW1nW2FsdD0iSG9zdGluZ2FzIFNlcnZlcmlhaS5sdCJd")],estonian:[c("QVtocmVmKj0iaHR0cDovL3BheTRyZXN1bHRzMjQuZXUiXQ==")],fanboyAnnoyances:["#ac-lre-player",".navigate-to-top","#subscribe_popup",".newsletter_holder","#back-top"],fanboyAntiFacebook:[".util-bar-module-firefly-visible"],fanboyEnhancedTrackers:[".open.pushModal","#issuem-leaky-paywall-articles-zero-remaining-nag","#sovrn_container",'div[class$="-hide"][zoompage-fontsize][style="display: block;"]',".BlockNag__Card"],fanboySocial:["#FollowUs","#meteored_share","#social_follow",".article-sharer",".community__social-desc"],frellwitSwedish:[c("YVtocmVmKj0iY2FzaW5vcHJvLnNlIl1bdGFyZ2V0PSJfYmxhbmsiXQ=="),c("YVtocmVmKj0iZG9rdG9yLXNlLm9uZWxpbmsubWUiXQ=="),"article.category-samarbete",c("ZGl2LmhvbGlkQWRz"),"ul.adsmodern"],greekAdBlock:[c("QVtocmVmKj0iYWRtYW4ub3RlbmV0LmdyL2NsaWNrPyJd"),c("QVtocmVmKj0iaHR0cDovL2F4aWFiYW5uZXJzLmV4b2R1cy5nci8iXQ=="),c("QVtocmVmKj0iaHR0cDovL2ludGVyYWN0aXZlLmZvcnRobmV0LmdyL2NsaWNrPyJd"),"DIV.agores300","TABLE.advright"],hungarian:["#cemp_doboz",".optimonk-iframe-container",c("LmFkX19tYWlu"),c("W2NsYXNzKj0iR29vZ2xlQWRzIl0="),"#hirdetesek_box"],iDontCareAboutCookies:['.alert-info[data-block-track*="CookieNotice"]',".ModuleTemplateCookieIndicator",".o--cookies--container","#cookies-policy-sticky","#stickyCookieBar"],icelandicAbp:[c("QVtocmVmXj0iL2ZyYW1ld29yay9yZXNvdXJjZXMvZm9ybXMvYWRzLmFzcHgiXQ==")],latvian:[c("YVtocmVmPSJodHRwOi8vd3d3LnNhbGlkemluaS5sdi8iXVtzdHlsZT0iZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMjBweDsgaGVpZ2h0OiA0MHB4OyBvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7Il0="),c("YVtocmVmPSJodHRwOi8vd3d3LnNhbGlkemluaS5sdi8iXVtzdHlsZT0iZGlzcGxheTogYmxvY2s7IHdpZHRoOiA4OHB4OyBoZWlnaHQ6IDMxcHg7IG92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsiXQ==")],listKr:[c("YVtocmVmKj0iLy9hZC5wbGFuYnBsdXMuY28ua3IvIl0="),c("I2xpdmVyZUFkV3JhcHBlcg=="),c("YVtocmVmKj0iLy9hZHYuaW1hZHJlcC5jby5rci8iXQ=="),c("aW5zLmZhc3R2aWV3LWFk"),".revenue_unit_item.dable"],listeAr:[c("LmdlbWluaUxCMUFk"),".right-and-left-sponsers",c("YVtocmVmKj0iLmFmbGFtLmluZm8iXQ=="),c("YVtocmVmKj0iYm9vcmFxLm9yZyJd"),c("YVtocmVmKj0iZHViaXp6bGUuY29tL2FyLz91dG1fc291cmNlPSJd")],listeFr:[c("YVtocmVmXj0iaHR0cDovL3Byb21vLnZhZG9yLmNvbS8iXQ=="),c("I2FkY29udGFpbmVyX3JlY2hlcmNoZQ=="),c("YVtocmVmKj0id2Vib3JhbWEuZnIvZmNnaS1iaW4vIl0="),".site-pub-interstitiel",'div[id^="crt-"][data-criteo-id]'],officialPolish:["#ceneo-placeholder-ceneo-12",c("W2hyZWZePSJodHRwczovL2FmZi5zZW5kaHViLnBsLyJd"),c("YVtocmVmXj0iaHR0cDovL2Fkdm1hbmFnZXIudGVjaGZ1bi5wbC9yZWRpcmVjdC8iXQ=="),c("YVtocmVmXj0iaHR0cDovL3d3dy50cml6ZXIucGwvP3V0bV9zb3VyY2UiXQ=="),c("ZGl2I3NrYXBpZWNfYWQ=")],ro:[c("YVtocmVmXj0iLy9hZmZ0cmsuYWx0ZXgucm8vQ291bnRlci9DbGljayJd"),c("YVtocmVmXj0iaHR0cHM6Ly9ibGFja2ZyaWRheXNhbGVzLnJvL3Ryay9zaG9wLyJd"),c("YVtocmVmXj0iaHR0cHM6Ly9ldmVudC4ycGVyZm9ybWFudC5jb20vZXZlbnRzL2NsaWNrIl0="),c("YVtocmVmXj0iaHR0cHM6Ly9sLnByb2ZpdHNoYXJlLnJvLyJd"),'a[href^="/url/"]'],ruAd:[c("YVtocmVmKj0iLy9mZWJyYXJlLnJ1LyJd"),c("YVtocmVmKj0iLy91dGltZy5ydS8iXQ=="),c("YVtocmVmKj0iOi8vY2hpa2lkaWtpLnJ1Il0="),"#pgeldiz",".yandex-rtb-block"],thaiAds:["a[href*=macau-uta-popup]",c("I2Fkcy1nb29nbGUtbWlkZGxlX3JlY3RhbmdsZS1ncm91cA=="),c("LmFkczMwMHM="),".bumq",".img-kosana"],webAnnoyancesUltralist:["#mod-social-share-2","#social-tools",c("LmN0cGwtZnVsbGJhbm5lcg=="),".zergnet-recommend",".yt.btn-link.btn-md.btn"]},n=Object.keys(e),[4,T((i=[]).concat.apply(i,n.map((function(n){return e[n]}))))]):[2,void 0];case 1:return o=t.sent(),r&&function(e,n){for(var t="DOM blockers debug:\n```",r=0,o=Object.keys(e);r<o.length;r++){var a=o[r];t+="\n".concat(a,":");for(var i=0,c=e[a];i<c.length;i++){var u=c[i];t+="\n ".concat(n[u]?"🚫":"➡️"," ").concat(u)}}console.log("".concat(t,"\n```"))}(e,o),(a=n.filter((function(n){var t=e[n];return g(t.map((function(e){return o[e]})))>.6*t.length}))).sort(),[2,a]}var c}))}))},fontPreferences:function(){return function(e,n){void 0===n&&(n=4e3);return X((function(t,o){var a=o.document,i=a.body,c=i.style;c.width="".concat(n,"px"),c.webkitTextSizeAdjust=c.textSizeAdjust="none",S()?i.style.zoom="".concat(1/o.devicePixelRatio):x()&&(i.style.zoom="reset");var u=a.createElement("div");return u.textContent=r([],Array(n/20<<0),!0).map((function(){return"word"})).join(" "),i.appendChild(u),e(a,i)}),'<!doctype html><html><head><meta name="viewport" content="width=device-width, initial-scale=1">')}((function(e,n){for(var t={},r={},o=0,a=Object.keys(ee);o<a.length;o++){var i=a[o],c=ee[i],u=c[0],l=void 0===u?{}:u,s=c[1],d=void 0===s?"mmMwWLliI0fiflO&1":s,m=e.createElement("span");m.textContent=d,m.style.whiteSpace="nowrap";for(var f=0,v=Object.keys(l);f<v.length;f++){var h=v[f],p=l[h];void 0!==p&&(m.style[h]=p)}t[i]=m,n.appendChild(e.createElement("br")),n.appendChild(m)}for(var b=0,y=Object.keys(ee);b<y.length;b++){r[i=y[b]]=t[i].getBoundingClientRect().width}return r}))},audio:function(){var e=window,n=e.OfflineAudioContext||e.webkitOfflineAudioContext;if(!n)return-2;if(x()&&!F()&&!function(){var e=window;return g(["DOMRectList"in e,"RTCPeerConnectionIceEvent"in e,"SVGGeometryElement"in e,"ontransitioncancel"in e])>=3}())return-1;var t=new n(1,5e3,44100),r=t.createOscillator();r.type="triangle",r.frequency.value=1e4;var o=t.createDynamicsCompressor();o.threshold.value=-50,o.knee.value=40,o.ratio.value=12,o.attack.value=0,o.release.value=.25,r.connect(o),o.connect(t.destination),r.start(0);var i=function(e){var n=3,t=500,r=500,o=5e3,i=function(){};return[new Promise((function(c,l){var s=!1,d=0,m=0;e.oncomplete=function(e){return c(e.renderedBuffer)};var f=function(){setTimeout((function(){return l(R("timeout"))}),Math.min(r,m+o-Date.now()))},v=function(){try{var r=e.startRendering();switch(a(r)&&u(r),e.state){case"running":m=Date.now(),s&&f();break;case"suspended":document.hidden||d++,s&&d>=n?l(R("suspended")):setTimeout(v,t)}}catch(o){l(o)}};v(),i=function(){s||(s=!0,m>0&&f())}})),i]}(t),c=i[0],l=i[1],s=c.then((function(e){return function(e){for(var n=0,t=0;t<e.length;++t)n+=Math.abs(e[t]);return n}(e.getChannelData(0).subarray(4500))}),(function(e){if("timeout"===e.name||"suspended"===e.name)return-3;throw e}));return u(s),function(){return l(),s}},screenFrame:function(){var e=this,r=z();return function(){return n(e,void 0,void 0,(function(){var e,n;return t(this,(function(t){switch(t.label){case 0:return[4,r()];case 1:return e=t.sent(),[2,[(n=function(e){return null===e?null:w(e,10)})(e[0]),n(e[1]),n(e[2]),n(e[3])]]}}))}))}},osCpu:function(){return navigator.oscpu},languages:function(){var e,n=navigator,t=[],r=n.language||n.userLanguage||n.browserLanguage||n.systemLanguage;if(void 0!==r&&t.push([r]),Array.isArray(n.languages))S()&&g([!("MediaSettingsRange"in(e=window)),"RTCEncodedAudioFrame"in e,""+e.Intl=="[object Intl]",""+e.Reflect=="[object Reflect]"])>=3||t.push(n.languages);else if("string"==typeof n.languages){var o=n.languages;o&&t.push(o.split(","))}return t},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return y(b(navigator.deviceMemory),void 0)},screenResolution:function(){var e=screen,n=function(e){return y(p(e),null)},t=[n(e.width),n(e.height)];return t.sort().reverse(),t},hardwareConcurrency:function(){return y(p(navigator.hardwareConcurrency),void 0)},timezone:function(){var e,n=null===(e=window.Intl)||void 0===e?void 0:e.DateTimeFormat;if(n){var t=(new n).resolvedOptions().timeZone;if(t)return t}var r,o=(r=(new Date).getFullYear(),-Math.max(b(new Date(r,0,1).getTimezoneOffset()),b(new Date(r,6,1).getTimezoneOffset())));return"UTC".concat(o>=0?"+":"").concat(Math.abs(o))},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!W()&&!C())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){var e=navigator.platform;return"MacIntel"===e&&x()&&!F()?function(){if("iPad"===navigator.platform)return!0;var e=screen,n=e.width/e.height;return g(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,n>.65&&n<1.53])>=2}()?"iPad":"iPhone":e},plugins:function(){var e=navigator.plugins;if(e){for(var n=[],t=0;t<e.length;++t){var r=e[t];if(r){for(var o=[],a=0;a<r.length;++a){var i=r[a];o.push({type:i.type,suffixes:i.suffixes})}n.push({name:r.name,description:r.description,mimeTypes:o})}}return n}},canvas:function(){var e,n,t=!1,r=function(){var e=document.createElement("canvas");return e.width=1,e.height=1,[e,e.getContext("2d")]}(),o=r[0],a=r[1];if(function(e,n){return!(!n||!e.toDataURL)}(o,a)){t=function(e){return e.rect(0,0,10,10),e.rect(2,2,6,6),!e.isPointInPath(5,5,"evenodd")}(a),function(e,n){e.width=240,e.height=60,n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(100,1,62,20),n.fillStyle="#069",n.font='11pt "Times New Roman"';var t="Cwm fjordbank gly ".concat(String.fromCharCode(55357,56835));n.fillText(t,2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText(t,4,45)}(o,a);var i=H(o);i!==H(o)?e=n="unstable":(n=i,function(e,n){e.width=122,e.height=110,n.globalCompositeOperation="multiply";for(var t=0,r=[["#f2f",40,40],["#2ff",80,40],["#ff2",60,80]];t<r.length;t++){var o=r[t],a=o[0],i=o[1],c=o[2];n.fillStyle=a,n.beginPath(),n.arc(i,c,40,0,2*Math.PI,!0),n.closePath(),n.fill()}n.fillStyle="#f9c",n.arc(60,60,60,0,2*Math.PI,!0),n.arc(60,60,20,0,2*Math.PI,!0),n.fill("evenodd")}(o,a),e=H(o))}else e=n="";return{winding:t,geometry:e,text:n}},touchSupport:function(){var e,n=navigator,t=0;void 0!==n.maxTouchPoints?t=p(n.maxTouchPoints):void 0!==n.msMaxTouchPoints&&(t=n.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(r){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in window}},vendor:function(){return navigator.vendor||""},vendorFlavors:function(){for(var e=[],n=0,t=["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"];n<t.length;n++){var r=t[n],o=window[r];o&&"object"==typeof o&&e.push(r)}return e.sort()},cookiesEnabled:function(){var e=document;try{e.cookie="cookietest=1; SameSite=Strict;";var n=-1!==e.cookie.indexOf("cookietest=");return e.cookie="cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT",n}catch(t){return!1}},colorGamut:function(){for(var e=0,n=["rec2020","p3","srgb"];e<n.length;e++){var t=n[e];if(matchMedia("(color-gamut: ".concat(t,")")).matches)return t}},invertedColors:function(){return!!_("inverted")||!_("none")&&void 0},forcedColors:function(){return!!O("active")||!O("none")&&void 0},monochrome:function(){if(matchMedia("(min-monochrome: 0)").matches){for(var e=0;e<=100;++e)if(matchMedia("(max-monochrome: ".concat(e,")")).matches)return e;throw new Error("Too high value")}},contrast:function(){return U("no-preference")?0:U("high")||U("more")?1:U("low")||U("less")?-1:U("forced")?10:void 0},reducedMotion:function(){return!!Q("reduce")||!Q("no-preference")&&void 0},hdr:function(){return!!K("high")||!K("standard")&&void 0},math:function(){var e,n=q.acos||$,t=q.acosh||$,r=q.asin||$,o=q.asinh||$,a=q.atanh||$,i=q.atan||$,c=q.sin||$,u=q.sinh||$,l=q.cos||$,s=q.cosh||$,d=q.tan||$,m=q.tanh||$,f=q.exp||$,v=q.expm1||$,h=q.log1p||$;return{acos:n(.12312423423423424),acosh:t(1e308),acoshPf:(e=1e154,q.log(e+q.sqrt(e*e-1))),asin:r(.12312423423423424),asinh:o(1),asinhPf:function(e){return q.log(e+q.sqrt(e*e+1))}(1),atanh:a(.5),atanhPf:function(e){return q.log((1+e)/(1-e))/2}(.5),atan:i(.5),sin:c(-1e300),sinh:u(1),sinhPf:function(e){return q.exp(e)-1/q.exp(e)/2}(1),cos:l(10.000000000123),cosh:s(1),coshPf:function(e){return(q.exp(e)+1/q.exp(e))/2}(1),tan:d(-1e300),tanh:m(1),tanhPf:function(e){return(q.exp(2*e)-1)/(q.exp(2*e)+1)}(1),exp:f(1),expm1:v(1),expm1Pf:function(e){return q.exp(e)-1}(1),log1p:h(10),log1pPf:function(e){return q.log(1+e)}(10),powPI:function(e){return q.pow(q.PI,e)}(-100)}},videoCard:function(){var e,n=document.createElement("canvas"),t=null!==(e=n.getContext("webgl"))&&void 0!==e?e:n.getContext("experimental-webgl");if(t&&"getExtension"in t){var r=t.getExtension("WEBGL_debug_renderer_info");if(r)return{vendor:(t.getParameter(r.UNMASKED_VENDOR_WEBGL)||"").toString(),renderer:(t.getParameter(r.UNMASKED_RENDERER_WEBGL)||"").toString()}}},pdfViewerEnabled:function(){return navigator.pdfViewerEnabled},architecture:function(){var e=new Float32Array(1),n=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],n[3]}};function te(e){var n=function(e){if(G())return.4;if(x())return F()?.5:.3;var n=e.platform.value||"";if(/^Win/.test(n))return.6;if(/^Mac/.test(n))return.5;return.7}(e),t=function(e){return w(.99+.01*e,1e-4)}(n);return{score:n,comment:"$ if upgrade to Pro: https://fpjs.dev/pro".replace(/\$/g,"".concat(t))}}function re(n){return JSON.stringify(n,(function(n,t){return t instanceof Error?e({name:(r=t).name,message:r.message,stack:null===(o=r.stack)||void 0===o?void 0:o.split("\n")},r):t;var r,o}),2)}function oe(e){return h(function(e){for(var n="",t=0,r=Object.keys(e).sort();t<r.length;t++){var o=r[t],a=e[o],i=a.error?"error":JSON.stringify(a.value);n+="".concat(n?"|":"").concat(o.replace(/([:|\\])/g,"\\$1"),":").concat(i)}return n}(e))}function ae(e){return void 0===e&&(e=50),function(e,n){void 0===n&&(n=1/0);var t=window.requestIdleCallback;return t?new Promise((function(e){return t.call(window,(function(){return e()}),{timeout:n})})):o(Math.min(e,n))}(e,2*e)}function ie(e,r){var o=Date.now();return{get:function(a){return n(this,void 0,void 0,(function(){var n,i,c;return t(this,(function(t){switch(t.label){case 0:return n=Date.now(),[4,e()];case 1:return i=t.sent(),c=function(e){var n;return{get visitorId(){return void 0===n&&(n=oe(this.components)),n},set visitorId(e){n=e},confidence:te(e),components:e,version:"3.4.2"}}(i),(r||(null==a?void 0:a.debug))&&console.log("Copy the text below to get the debug data:\n\n```\nversion: ".concat(c.version,"\nuserAgent: ").concat(navigator.userAgent,"\ntimeBetweenLoadAndGet: ").concat(n-o,"\nvisitorId: ").concat(c.visitorId,"\ncomponents: ").concat(re(i),"\n```")),[2,c]}}))}))}}}function ce(e){var r=void 0===e?{}:e,o=r.delayFallback,a=r.debug;return r.monitoring,n(this,void 0,void 0,(function(){return t(this,(function(e){switch(e.label){case 0:return[4,ae(o)];case 1:return e.sent(),[2,ie(V(ne,{debug:a},[]),a)]}}))}))}var ue={load:ce,hashComponents:oe,componentsToDebugString:re},le=h;export{re as componentsToDebugString,ue as default,M as getFullscreenElement,z as getScreenFrame,oe as hashComponents,G as isAndroid,S as isChromium,F as isDesktopSafari,C as isEdgeHTML,Y as isGecko,W as isTrident,x as isWebKit,ce as load,V as loadSources,le as murmurX64Hash128,ae as prepareForSources,ne as sources,Z as transformSource,X as withIframe};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{upgini-1.1.274a4 → upgini-1.1.274a3388.post2}/src/upgini/resource_bundle/strings_widget.properties
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|