diff --git a/solidago/src/solidago/_state/_models/base.py b/solidago/src/solidago/_state/_models/base.py index 5129fe86f2..9d41b28c0c 100644 --- a/solidago/src/solidago/_state/_models/base.py +++ b/solidago/src/solidago/_state/_models/base.py @@ -34,7 +34,7 @@ def __call__(self, entities: Union["Entity", "Entities"]) -> MultiScore: from solidago._state._entities import Entities if isinstance(entities, Entities): return MultiScore( - { entity: self(entity) for entity in entities }, + { str(entity): self(entity) for entity in entities }, key_names=["entity_name", "criterion"] ) entity = entities diff --git a/solidago/src/solidago/_state/_models/post_processed.py b/solidago/src/solidago/_state/_models/post_processed.py index 21cde4c686..10947d440b 100644 --- a/solidago/src/solidago/_state/_models/post_processed.py +++ b/solidago/src/solidago/_state/_models/post_processed.py @@ -27,11 +27,11 @@ def post_process(self, score: Union[Score, MultiScore]) -> Union[Score, MultiSco value = self.post_process_fn(score.value) extremes = [self.post_process_fn(score.max), self.post_process_fn(score.min)] return Score(value, value - min(extremes), max(extremes) - value) - else: - return MultiScore({ - criterion: self.process(criterion_score) - for criterion, criterion_score in score - }) + assert isinstance(score, MultiScore) + return MultiScore({ + criterion: self.post_process(criterion_score) + for criterion, criterion_score in score + }) class SquashedModel(PostProcessedModel): diff --git a/solidago/src/solidago/_state/_models/score.py b/solidago/src/solidago/_state/_models/score.py index 9edec155a6..5fcd570c86 100644 --- a/solidago/src/solidago/_state/_models/score.py +++ b/solidago/src/solidago/_state/_models/score.py @@ -25,7 +25,7 @@ def __init__(self, values = value.value, value.left_unc, value.right_unc elif isinstance(value, (dict, Series)): assert left_unc is None and right_unc is None - values = value["value"], value["left_unc"], value["right_unc"] + values = value["score"], value["left_unc"], value["right_unc"] elif isinstance(value, (list, tuple)): assert left_unc is None and right_unc is None values = value @@ -59,23 +59,59 @@ def to_dict(self) -> dict[str, float]: def average_uncertainty(self) -> float: return (self.left_unc + self.right_unc) / 2 + + def __eq__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.to_triplet() == score.to_triplet() + + def __neq__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.to_triplet() != score.to_triplet() + + def __lt__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.max < score.min + + def __gt__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.min > score.max + + def __le__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.min <= score.max + + def __ge__(self, score: Union[int, float, "Score"]) -> bool: + if isinstance(score, (int, float)): + score = Score(score, 0, 0) + return self.max >= score.min def __neg__(self) -> "Score": return Score(- self.value, self.right_unc, self.left_unc) - def __add__(self, score: "Score") -> "Score": + def __add__(self, score: Union[int, float, "Score"]) -> "Score": + if isinstance(score, (int, float)): + score = Score(score, 0, 0) return Score( self.value + score.value, self.left_unc + score.left_unc, self.right_unc + score.right_unc ) - def __mul__(self, s: "Score") -> "Score": + def __mul__(self, s: Union[int, float, "Score"]) -> "Score": + if isinstance(s, (int, float)): + s = Score(score, 0, 0) value = self.value * s.value extremes = [ self.min * s.min, self.min * s.max, self.max * s.min, self.max * s.max ] return Score(value, value - min(extremes), max(extremes) - value) def __truediv__(self, s: "Score") -> "Score": + if isinstance(score, (int, float)): + score = Score(score, 0, 0) if 0 in self or 0 in s: return Score.nan() value = self.value / s.value diff --git a/solidago/src/solidago/_state/_models/user_models.py b/solidago/src/solidago/_state/_models/user_models.py index 972e3ff483..b9b45d0210 100644 --- a/solidago/src/solidago/_state/_models/user_models.py +++ b/solidago/src/solidago/_state/_models/user_models.py @@ -18,7 +18,10 @@ def __init__(self, *args, default_model_cls: type=DirectScoring, **kwargs): def default_value(self) -> ScoringModel: return self.default_model_cls() - + + def __call__(self, entity: Union[str, "Entity", "Entities"]) -> MultiScore: + return self.score(entity) + def score(self, entity: Union[str, "Entity", "Entities"]) -> MultiScore: from solidago._state._entities import Entity, Entities if isinstance(entity, (str, Entity)): diff --git a/solidago/src/solidago/_state/tournesol.py b/solidago/src/solidago/_state/tournesol.py index 6436fe6722..36d4ceeecf 100644 --- a/solidago/src/solidago/_state/tournesol.py +++ b/solidago/src/solidago/_state/tournesol.py @@ -47,7 +47,7 @@ def load(filename, columns): "criteria": "criterion", "video": "entity_name", "public_username": "username", - "uncertainty": "left_unc", + "uncertainty": "left_unc", }) vouches["kind"] = "Personhood" diff --git a/solidago/src/solidago/primitives/datastructure/named_dataframe.py b/solidago/src/solidago/primitives/datastructure/named_dataframe.py index bb9455aa11..a54ad91950 100644 --- a/solidago/src/solidago/primitives/datastructure/named_dataframe.py +++ b/solidago/src/solidago/primitives/datastructure/named_dataframe.py @@ -27,8 +27,8 @@ def __init__(self, *args, save_filename: Optional[Union[str, Path]]=None, **kwar super().__init__(*args, **kwargs) self.meta = SimpleNamespace() self.meta.save_filename = save_filename - # if len(self.columns) == 1: - # self.rename(columns={ self.columns[0]: self.index_name }, inplace=True) + if self.index.name is None and len(self.columns) == 1 and self.columns[0] == 0: + self.rename(columns={ self.columns[0]: self.index_name }, inplace=True) if self.index_name in self.columns: self.set_index(self.index_name, inplace=True) self.index = [str(name) for name in self.index] diff --git a/solidago/src/solidago/primitives/datastructure/nested_dict.py b/solidago/src/solidago/primitives/datastructure/nested_dict.py index 39c4eb755f..57b5131caf 100644 --- a/solidago/src/solidago/primitives/datastructure/nested_dict.py +++ b/solidago/src/solidago/primitives/datastructure/nested_dict.py @@ -25,7 +25,7 @@ def init_dict(self, d: Union["NestedDict", dict, DataFrame]) -> None: if isinstance(d, NestedDict): self._dict |= d._dict elif isinstance(d, dict) and len(self.key_names) == 1: - self._dict |= d + self._dict |= { key: self.sanitize(value) for key, value in d.items() } elif isinstance(d, dict): self._dict |= { key: type(self)(d=value, key_names=self.key_names[1:]) diff --git a/solidago/src/solidago/primitives/datastructure/nested_dict_of_tuples.py b/solidago/src/solidago/primitives/datastructure/nested_dict_of_tuples.py index 503e065bb8..f7494f8c59 100644 --- a/solidago/src/solidago/primitives/datastructure/nested_dict_of_tuples.py +++ b/solidago/src/solidago/primitives/datastructure/nested_dict_of_tuples.py @@ -22,10 +22,12 @@ def __init__(self, self.value_names = value_names super().__init__(d=d, key_names=key_names, save_filename=save_filename) - def add_row(self, keys: list[str], row: Union[dict, Series]) -> None: - self[keys] = tuple([row[name] for name in self.value_names]) + def add_row(self, keys: Union[str, list[str]], row: Union[dict, Series]) -> None: + self[keys] = self.sanitize(row) def sanitize(self, value: Any) -> tuple: + if isinstance(value, (dict, Series)): + return [value[name] for name in self.value_names] return tuple(value) def get_set(self, key_name: str, default_value: Optional[str]=None) -> set: diff --git a/solidago/tests/load_save/generated_state/assessments.csv b/solidago/tests/load_save/generated_state/assessments.csv index 19cfd2be68..7461a9b457 100644 --- a/solidago/tests/load_save/generated_state/assessments.csv +++ b/solidago/tests/load_save/generated_state/assessments.csv @@ -1,85 +1,99 @@ username,criterion,entity_name,assessment,assessment_min,assessment_max -user_0,default,entity_0,-3.084032146485425,-inf,inf -user_0,default,entity_16,-4.0878539983787,-inf,inf -user_0,default,entity_15,-1.490202061094308,-inf,inf -user_0,default,entity_18,-1.0038588539696902,-inf,inf -user_0,default,entity_9,0.15862347293943002,-inf,inf -user_0,default,entity_13,0.6825297084581012,-inf,inf -user_0,default,entity_19,-1.1330286216672032,-inf,inf -user_0,default,entity_5,1.5277158309506345,-inf,inf -user_0,default,entity_4,3.4585969415576345,-inf,inf -user_1,default,entity_3,1.667515895613929,-inf,inf -user_1,default,entity_14,1.006242789479527,-inf,inf -user_1,default,entity_7,2.664075720463755,-inf,inf -user_1,default,entity_18,-0.8301415440372613,-inf,inf -user_1,default,entity_8,-0.1742090239878929,-inf,inf -user_1,default,entity_10,-1.1835582791092611,-inf,inf -user_1,default,entity_6,-1.1948480725179846,-inf,inf -user_1,default,entity_16,-0.9539951632086847,-inf,inf -user_1,default,entity_12,-2.1802861964071387,-inf,inf -user_1,default,entity_2,-0.42652666498132275,-inf,inf -user_2,default,entity_11,-1.387325030216633,-inf,inf -user_2,default,entity_9,-0.9284619449437295,-inf,inf -user_2,default,entity_18,-0.48508960064422346,-inf,inf -user_2,default,entity_14,-0.5877998959704127,-inf,inf -user_2,default,entity_17,-0.8219599742190199,-inf,inf -user_2,default,entity_0,-0.7750717258171584,-inf,inf -user_2,default,entity_4,-0.7272800370864463,-inf,inf -user_2,default,entity_13,-0.33567087330509393,-inf,inf -user_2,default,entity_5,1.0737649403543752,-inf,inf -user_2,default,entity_1,1.3235236743850212,-inf,inf -user_2,default,entity_16,2.548852058606136,-inf,inf -user_3,default,entity_19,0.9453108117051138,-inf,inf -user_3,default,entity_1,2.2805036607813913,-inf,inf -user_3,default,entity_13,-1.5769377112488974,-inf,inf -user_3,default,entity_16,1.5165254267520498,-inf,inf -user_3,default,entity_10,2.072081238298041,-inf,inf -user_3,default,entity_3,-1.1848498093087512,-inf,inf -user_3,default,entity_7,1.3271180042064845,-inf,inf -user_3,default,entity_18,-0.25013042087067283,-inf,inf -user_3,default,entity_12,-1.021665684122971,-inf,inf -user_3,default,entity_6,-1.0810028748325473,-inf,inf -user_3,default,entity_2,1.203173894386199,-inf,inf -user_4,default,entity_19,0.2639409528014471,-inf,inf -user_4,default,entity_8,0.440512579577302,-inf,inf -user_4,default,entity_2,-0.43449183897222454,-inf,inf -user_4,default,entity_17,0.6740247220648662,-inf,inf -user_4,default,entity_18,1.2408002798143847,-inf,inf -user_4,default,entity_3,0.482883923065351,-inf,inf -user_4,default,entity_15,0.8328232652751022,-inf,inf -user_4,default,entity_12,-0.4929965759725601,-inf,inf -user_4,default,entity_14,-0.5966527881357854,-inf,inf -user_4,default,entity_7,0.11951141508835739,-inf,inf -user_4,default,entity_16,-0.5090007368392502,-inf,inf -user_5,default,entity_6,-0.21462643170061727,-inf,inf +user_0,default,entity_16,-2.0749057611785386,-inf,inf +user_0,default,entity_15,-2.39370352625087,-inf,inf +user_0,default,entity_11,-1.5992836978625538,-inf,inf +user_0,default,entity_18,-2.619031854481638,-inf,inf +user_0,default,entity_6,-1.2481876740748055,-inf,inf +user_0,default,entity_17,-0.8195927297894479,-inf,inf +user_0,default,entity_14,-1.2667207574469999,-inf,inf +user_0,default,entity_19,0.8509795934379412,-inf,inf +user_0,default,entity_4,3.053938668091461,-inf,inf +user_1,default,entity_10,1.666205471029322,-inf,inf +user_1,default,entity_15,1.3982102010500272,-inf,inf +user_1,default,entity_7,0.31743364012724,-inf,inf +user_1,default,entity_2,2.0757722679531048,-inf,inf +user_1,default,entity_1,0.24777798376771804,-inf,inf +user_1,default,entity_17,1.2172607977951482,-inf,inf +user_1,default,entity_14,0.7587810143743123,-inf,inf +user_1,default,entity_16,-0.45322198998446633,-inf,inf +user_1,default,entity_3,-0.6293299841653897,-inf,inf +user_1,default,entity_12,-2.053760441767217,-inf,inf +user_1,default,entity_18,-0.9601193237500203,-inf,inf +user_1,default,entity_11,-0.7764255417543154,-inf,inf +user_2,default,entity_8,-3.1840313925258865,-inf,inf +user_2,default,entity_12,-1.3582673358306874,-inf,inf +user_2,default,entity_4,-0.3920343878647034,-inf,inf +user_2,default,entity_13,-1.0307685022464559,-inf,inf +user_2,default,entity_19,1.2140338299536473,-inf,inf +user_2,default,entity_1,0.34488131370003594,-inf,inf +user_2,default,entity_5,0.4963366907015018,-inf,inf +user_2,default,entity_16,1.3239011724971825,-inf,inf +user_3,default,entity_1,1.7159560105752791,-inf,inf +user_3,default,entity_2,0.900609937541631,-inf,inf +user_3,default,entity_10,0.010155796202459877,-inf,inf +user_3,default,entity_19,1.9939222430641497,-inf,inf +user_3,default,entity_18,-0.2487610576189404,-inf,inf +user_3,default,entity_6,-1.201379294506745,-inf,inf +user_3,default,entity_8,-1.989535014457278,-inf,inf +user_3,default,entity_14,-1.421354527295856,-inf,inf +user_3,default,entity_5,-0.32127542248226026,-inf,inf +user_4,default,entity_8,0.28435161869848846,-inf,inf +user_4,default,entity_6,2.4003825078321817,-inf,inf +user_4,default,entity_19,0.42259228898088025,-inf,inf +user_4,default,entity_11,0.055986495346031506,-inf,inf +user_4,default,entity_17,0.2099984004735524,-inf,inf +user_4,default,entity_13,0.4161872688546774,-inf,inf +user_4,default,entity_9,1.6036019683037805,-inf,inf +user_4,default,entity_4,-0.18158399657965602,-inf,inf +user_4,default,entity_2,2.0454369805034163,-inf,inf +user_4,default,entity_0,0.3854155927801495,-inf,inf +user_4,default,entity_15,-0.14632039422818038,-inf,inf +user_4,default,entity_5,-2.022605231132655,-inf,inf +user_4,default,entity_18,-0.872532836583685,-inf,inf +user_4,default,entity_3,-0.3827672112907701,-inf,inf +user_4,default,entity_12,0.6017254822778608,-inf,inf +user_4,default,entity_7,-2.9180266496509044,-inf,inf +user_4,default,entity_16,-0.7599310550355487,-inf,inf +user_5,default,entity_3,-2.1101274264627663,-inf,inf +user_5,default,entity_14,-2.762781599519231,-inf,inf +user_5,default,entity_2,-0.5100542990101968,-inf,inf user_5,default,entity_17,0.05710431263487662,-inf,inf -user_6,default,entity_13,-0.6865530798790695,-inf,inf -user_6,default,entity_16,0.27755782227896963,-inf,inf -user_6,default,entity_4,-0.6587271432487042,-inf,inf -user_6,default,entity_8,-0.5583548331157635,-inf,inf -user_6,default,entity_18,1.9506928061461883,-inf,inf -user_6,default,entity_1,0.49050679907782496,-inf,inf -user_6,default,entity_2,-1.3252639653101215,-inf,inf -user_6,default,entity_0,-0.3233871818836943,-inf,inf -user_7,default,entity_4,0.18732339474126747,-inf,inf -user_7,default,entity_8,1.900874305115553,-inf,inf -user_7,default,entity_19,0.0966132005912641,-inf,inf -user_7,default,entity_3,0.9342862554614455,-inf,inf -user_7,default,entity_11,1.6668385201561917,-inf,inf -user_7,default,entity_5,0.7660559749152163,-inf,inf -user_7,default,entity_10,-1.394815185465011,-inf,inf -user_7,default,entity_2,-0.5664965551290375,-inf,inf -user_7,default,entity_14,3.0454263676652222,-inf,inf -user_8,default,entity_8,2.4404515835847844,-inf,inf -user_8,default,entity_4,2.1409310166269293,-inf,inf -user_8,default,entity_11,0.8428911156251948,-inf,inf -user_8,default,entity_14,0.11540882613427472,-inf,inf -user_8,default,entity_6,0.45813136118948833,-inf,inf -user_8,default,entity_2,0.31277617960683546,-inf,inf -user_9,default,entity_3,-1.9624260627998813,-inf,inf -user_9,default,entity_12,-0.6855884162192276,-inf,inf -user_9,default,entity_2,-0.8853080326940073,-inf,inf -user_9,default,entity_14,0.5609584765999138,-inf,inf -user_9,default,entity_9,-0.023301797645628702,-inf,inf -user_9,default,entity_5,-0.779672768494564,-inf,inf -user_9,default,entity_1,-2.172493689682739,-inf,inf +user_6,default,entity_16,-0.06305869415402687,-inf,inf +user_6,default,entity_6,-0.7677539107375391,-inf,inf +user_6,default,entity_3,-2.8643609493870237,-inf,inf +user_6,default,entity_11,-2.1819602163698275,-inf,inf +user_6,default,entity_4,-0.43687483459641485,-inf,inf +user_6,default,entity_9,-0.7354562201117167,-inf,inf +user_6,default,entity_13,-1.6808275477504329,-inf,inf +user_6,default,entity_8,0.9663711729296698,-inf,inf +user_6,default,entity_14,0.621626369112255,-inf,inf +user_6,default,entity_2,-0.35611410923840825,-inf,inf +user_6,default,entity_10,1.408450182481708,-inf,inf +user_6,default,entity_5,0.5043003970870001,-inf,inf +user_6,default,entity_7,2.0966207883047416,-inf,inf +user_7,default,entity_15,-0.5655431776581341,-inf,inf +user_7,default,entity_12,-0.18604211953544048,-inf,inf +user_7,default,entity_8,-0.719456200755322,-inf,inf +user_7,default,entity_10,-0.824253089052783,-inf,inf +user_7,default,entity_1,-1.1268342583835582,-inf,inf +user_7,default,entity_3,1.6072561062359942,-inf,inf +user_7,default,entity_18,0.43807952480223084,-inf,inf +user_7,default,entity_2,1.1942940555235904,-inf,inf +user_7,default,entity_4,-0.4542680865093558,-inf,inf +user_7,default,entity_14,2.5219389650833213,-inf,inf +user_7,default,entity_19,-0.6650799718202678,-inf,inf +user_7,default,entity_9,-0.13580933330195982,-inf,inf +user_7,default,entity_11,-0.4812107308028669,-inf,inf +user_7,default,entity_17,1.96090138537457,-inf,inf +user_8,default,entity_8,2.1127574448260513,-inf,inf +user_8,default,entity_4,2.642406825318763,-inf,inf +user_8,default,entity_9,0.5444086059726662,-inf,inf +user_8,default,entity_11,0.5846999636827297,-inf,inf +user_8,default,entity_2,0.7698291989015807,-inf,inf +user_8,default,entity_18,1.3419798902453495,-inf,inf +user_8,default,entity_5,1.7797980695330238,-inf,inf +user_9,default,entity_3,-0.01253707482118327,-inf,inf +user_9,default,entity_13,1.3216410202684816,-inf,inf +user_9,default,entity_11,1.694370071188104,-inf,inf +user_9,default,entity_14,1.5236251305880073,-inf,inf +user_9,default,entity_9,2.4498918215182184,-inf,inf diff --git a/solidago/tests/load_save/generated_state/comparisons.csv b/solidago/tests/load_save/generated_state/comparisons.csv index fd94227f8d..522c428ce9 100644 --- a/solidago/tests/load_save/generated_state/comparisons.csv +++ b/solidago/tests/load_save/generated_state/comparisons.csv @@ -1,564 +1,564 @@ username,criterion,left_name,right_name,comparison_max,comparison -user_0,default,entity_0,entity_12,10,4.0 user_0,default,entity_15,entity_1,10,-10.0 -user_0,default,entity_15,entity_11,10,9.0 -user_0,default,entity_11,entity_1,10,-10.0 -user_0,default,entity_11,entity_14,10,10.0 -user_0,default,entity_11,entity_3,10,7.0 -user_0,default,entity_12,entity_11,10,9.0 -user_0,default,entity_12,entity_9,10,10.0 -user_0,default,entity_12,entity_17,10,10.0 -user_0,default,entity_2,entity_12,10,-9.0 +user_0,default,entity_10,entity_0,10,-10.0 +user_0,default,entity_10,entity_11,10,9.0 +user_0,default,entity_10,entity_4,10,10.0 +user_0,default,entity_12,entity_10,10,7.0 +user_0,default,entity_12,entity_3,10,10.0 +user_0,default,entity_12,entity_14,10,9.0 +user_0,default,entity_18,entity_1,10,-10.0 +user_0,default,entity_18,entity_10,10,0.0 +user_0,default,entity_1,entity_6,10,10.0 +user_0,default,entity_1,entity_2,10,10.0 +user_0,default,entity_1,entity_17,10,10.0 +user_0,default,entity_0,entity_6,10,10.0 +user_0,default,entity_0,entity_3,10,10.0 +user_0,default,entity_0,entity_8,10,10.0 +user_0,default,entity_11,entity_6,10,10.0 +user_0,default,entity_11,entity_2,10,-3.0 +user_0,default,entity_11,entity_3,10,8.0 user_0,default,entity_2,entity_15,10,-9.0 -user_0,default,entity_2,entity_18,10,-9.0 -user_0,default,entity_2,entity_9,10,9.0 -user_0,default,entity_2,entity_14,10,10.0 -user_0,default,entity_1,entity_18,10,10.0 -user_0,default,entity_10,entity_18,10,4.0 -user_0,default,entity_10,entity_14,10,10.0 -user_0,default,entity_10,entity_19,10,10.0 -user_0,default,entity_9,entity_16,10,-10.0 -user_0,default,entity_9,entity_19,10,10.0 -user_0,default,entity_9,entity_8,10,10.0 -user_0,default,entity_6,entity_10,10,-10.0 -user_0,default,entity_6,entity_2,10,-10.0 -user_0,default,entity_6,entity_9,10,-7.0 -user_0,default,entity_6,entity_19,10,9.0 -user_0,default,entity_17,entity_1,10,-10.0 -user_0,default,entity_13,entity_12,10,-10.0 -user_0,default,entity_13,entity_16,10,-10.0 -user_0,default,entity_13,entity_2,10,-10.0 -user_0,default,entity_13,entity_7,10,8.0 -user_0,default,entity_7,entity_2,10,-10.0 -user_0,default,entity_14,entity_18,10,-10.0 -user_0,default,entity_14,entity_7,10,3.0 -user_0,default,entity_14,entity_8,10,10.0 +user_0,default,entity_2,entity_8,10,10.0 +user_0,default,entity_13,entity_0,10,-10.0 +user_0,default,entity_13,entity_11,10,-10.0 +user_0,default,entity_13,entity_6,10,-7.0 +user_0,default,entity_13,entity_2,10,-9.0 +user_0,default,entity_13,entity_17,10,-8.0 +user_0,default,entity_13,entity_19,10,7.0 +user_0,default,entity_9,entity_15,10,-9.0 +user_0,default,entity_9,entity_11,10,-10.0 +user_0,default,entity_7,entity_11,10,-10.0 +user_0,default,entity_17,entity_7,10,8.0 +user_0,default,entity_3,entity_18,10,-10.0 user_0,default,entity_3,entity_9,10,-10.0 -user_0,default,entity_3,entity_17,10,-10.0 -user_0,default,entity_3,entity_8,10,9.0 -user_0,default,entity_19,entity_12,10,-10.0 -user_0,default,entity_19,entity_2,10,-10.0 -user_0,default,entity_19,entity_18,10,-10.0 -user_0,default,entity_19,entity_13,10,-10.0 +user_0,default,entity_14,entity_6,10,-8.0 +user_0,default,entity_14,entity_13,10,-10.0 +user_0,default,entity_14,entity_19,10,10.0 user_0,default,entity_8,entity_1,10,-10.0 -user_0,default,entity_8,entity_13,10,-10.0 -user_0,default,entity_5,entity_16,10,-10.0 +user_0,default,entity_8,entity_11,10,-10.0 +user_0,default,entity_8,entity_18,10,-10.0 +user_0,default,entity_8,entity_17,10,-10.0 +user_0,default,entity_8,entity_19,10,-1.0 +user_0,default,entity_6,entity_8,10,10.0 +user_0,default,entity_19,entity_7,10,-8.0 user_0,default,entity_5,entity_10,10,-10.0 -user_0,default,entity_5,entity_19,10,-10.0 -user_0,default,entity_16,entity_4,10,10.0 -user_0,default,entity_4,entity_15,10,-10.0 +user_0,default,entity_5,entity_12,10,-10.0 +user_0,default,entity_5,entity_19,10,-9.0 user_0,default,entity_4,entity_11,10,-10.0 user_0,default,entity_4,entity_18,10,-10.0 -user_0,default,entity_4,entity_13,10,-10.0 -user_0,default,entity_4,entity_7,10,-10.0 -user_1,default,entity_3,entity_9,10,-7.0 -user_1,default,entity_3,entity_4,10,3.0 -user_1,default,entity_19,entity_9,10,-9.0 -user_1,default,entity_19,entity_2,10,-10.0 -user_1,default,entity_14,entity_18,10,-7.0 -user_1,default,entity_8,entity_18,10,10.0 -user_1,default,entity_8,entity_11,10,-9.0 -user_1,default,entity_13,entity_5,10,10.0 -user_1,default,entity_13,entity_9,10,-10.0 -user_1,default,entity_13,entity_10,10,-6.0 -user_1,default,entity_13,entity_12,10,-7.0 -user_1,default,entity_13,entity_2,10,9.0 -user_1,default,entity_7,entity_13,10,-10.0 -user_1,default,entity_10,entity_7,10,10.0 -user_1,default,entity_10,entity_18,10,-9.0 -user_1,default,entity_10,entity_12,10,-8.0 -user_1,default,entity_6,entity_3,10,10.0 -user_1,default,entity_6,entity_8,10,10.0 -user_1,default,entity_6,entity_0,10,9.0 -user_1,default,entity_6,entity_16,10,8.0 -user_1,default,entity_6,entity_11,10,-6.0 -user_1,default,entity_1,entity_9,10,-9.0 -user_1,default,entity_1,entity_12,10,-10.0 -user_1,default,entity_18,entity_1,10,9.0 -user_1,default,entity_15,entity_1,10,-7.0 -user_1,default,entity_15,entity_2,10,-1.0 -user_1,default,entity_0,entity_17,10,-7.0 -user_1,default,entity_5,entity_4,10,-10.0 -user_1,default,entity_9,entity_4,10,10.0 -user_1,default,entity_4,entity_7,10,8.0 -user_1,default,entity_4,entity_19,10,10.0 -user_1,default,entity_16,entity_5,10,9.0 -user_1,default,entity_16,entity_8,10,-1.0 -user_1,default,entity_2,entity_10,10,-6.0 -user_1,default,entity_11,entity_9,10,8.0 -user_1,default,entity_11,entity_18,10,6.0 -user_1,default,entity_11,entity_4,10,10.0 -user_2,default,entity_9,entity_8,10,-10.0 -user_2,default,entity_9,entity_4,10,10.0 -user_2,default,entity_18,entity_10,10,7.0 -user_2,default,entity_18,entity_15,10,9.0 -user_2,default,entity_15,entity_8,10,-10.0 -user_2,default,entity_15,entity_0,10,10.0 -user_2,default,entity_14,entity_15,10,9.0 -user_2,default,entity_0,entity_17,10,-9.0 -user_2,default,entity_4,entity_8,10,-9.0 -user_2,default,entity_8,entity_12,10,7.0 -user_2,default,entity_11,entity_2,10,10.0 -user_2,default,entity_2,entity_4,10,-2.0 -user_2,default,entity_13,entity_8,10,-10.0 +user_0,default,entity_4,entity_2,10,-9.0 +user_0,default,entity_4,entity_7,10,-9.0 +user_0,default,entity_4,entity_3,10,-10.0 +user_1,default,entity_15,entity_4,10,9.0 +user_1,default,entity_15,entity_3,10,4.0 +user_1,default,entity_15,entity_8,10,-2.0 +user_1,default,entity_2,entity_7,10,10.0 +user_1,default,entity_2,entity_8,10,-5.0 +user_1,default,entity_9,entity_7,10,10.0 +user_1,default,entity_1,entity_6,10,-10.0 +user_1,default,entity_1,entity_16,10,-9.0 +user_1,default,entity_6,entity_17,10,8.0 +user_1,default,entity_6,entity_9,10,8.0 +user_1,default,entity_6,entity_18,10,10.0 +user_1,default,entity_5,entity_10,10,-10.0 +user_1,default,entity_5,entity_7,10,-1.0 +user_1,default,entity_5,entity_9,10,-10.0 +user_1,default,entity_5,entity_0,10,-10.0 +user_1,default,entity_5,entity_11,10,-10.0 +user_1,default,entity_17,entity_5,10,10.0 +user_1,default,entity_17,entity_8,10,3.0 +user_1,default,entity_17,entity_11,10,-10.0 +user_1,default,entity_13,entity_19,10,10.0 +user_1,default,entity_13,entity_18,10,-9.0 +user_1,default,entity_19,entity_16,10,-10.0 +user_1,default,entity_0,entity_9,10,-10.0 +user_1,default,entity_7,entity_3,10,-9.0 +user_1,default,entity_3,entity_19,10,10.0 +user_1,default,entity_3,entity_1,10,6.0 +user_1,default,entity_12,entity_15,10,10.0 +user_1,default,entity_12,entity_6,10,10.0 +user_1,default,entity_12,entity_18,10,9.0 +user_1,default,entity_16,entity_12,10,-9.0 +user_1,default,entity_18,entity_4,10,10.0 +user_1,default,entity_14,entity_18,10,-10.0 +user_1,default,entity_8,entity_9,10,3.0 +user_1,default,entity_11,entity_19,10,9.0 +user_1,default,entity_11,entity_0,10,10.0 +user_2,default,entity_8,entity_11,10,8.0 +user_2,default,entity_9,entity_12,10,10.0 +user_2,default,entity_9,entity_2,10,9.0 +user_2,default,entity_17,entity_11,10,-10.0 +user_2,default,entity_10,entity_17,10,5.0 +user_2,default,entity_14,entity_17,10,10.0 +user_2,default,entity_14,entity_7,10,10.0 +user_2,default,entity_2,entity_8,10,-10.0 +user_2,default,entity_2,entity_14,10,-6.0 +user_2,default,entity_6,entity_4,10,3.0 +user_2,default,entity_11,entity_15,10,7.0 +user_2,default,entity_12,entity_0,10,8.0 +user_2,default,entity_0,entity_15,10,-10.0 +user_2,default,entity_0,entity_3,10,10.0 +user_2,default,entity_13,entity_11,10,-10.0 user_2,default,entity_13,entity_14,10,-10.0 -user_2,default,entity_13,entity_1,10,3.0 -user_2,default,entity_10,entity_13,10,9.0 -user_2,default,entity_19,entity_9,10,-6.0 -user_2,default,entity_19,entity_4,10,-10.0 -user_2,default,entity_3,entity_0,10,-10.0 -user_2,default,entity_17,entity_7,10,10.0 -user_2,default,entity_7,entity_15,10,-10.0 -user_2,default,entity_7,entity_12,10,-10.0 -user_2,default,entity_7,entity_3,10,-9.0 -user_2,default,entity_16,entity_8,10,-10.0 -user_2,default,entity_16,entity_18,10,-8.0 -user_2,default,entity_16,entity_2,10,-10.0 +user_2,default,entity_18,entity_13,10,10.0 +user_2,default,entity_19,entity_6,10,-10.0 +user_2,default,entity_19,entity_15,10,-10.0 +user_2,default,entity_1,entity_8,10,-10.0 +user_2,default,entity_5,entity_17,10,-9.0 +user_2,default,entity_7,entity_9,10,-10.0 +user_2,default,entity_7,entity_4,10,-10.0 +user_2,default,entity_7,entity_1,10,-9.0 +user_2,default,entity_3,entity_7,10,-4.0 +user_2,default,entity_16,entity_12,10,-10.0 +user_2,default,entity_16,entity_15,10,-10.0 +user_3,default,entity_0,entity_2,10,-10.0 +user_3,default,entity_0,entity_10,10,-10.0 +user_3,default,entity_0,entity_17,10,-10.0 +user_3,default,entity_2,entity_15,10,9.0 +user_3,default,entity_2,entity_7,10,2.0 +user_3,default,entity_10,entity_15,10,10.0 +user_3,default,entity_10,entity_2,10,-7.0 +user_3,default,entity_10,entity_9,10,-10.0 +user_3,default,entity_10,entity_11,10,-10.0 +user_3,default,entity_19,entity_18,10,-10.0 +user_3,default,entity_19,entity_9,10,-10.0 +user_3,default,entity_19,entity_14,10,-10.0 +user_3,default,entity_9,entity_2,10,6.0 +user_3,default,entity_9,entity_7,10,9.0 +user_3,default,entity_9,entity_3,10,-9.0 +user_3,default,entity_9,entity_5,10,-7.0 +user_3,default,entity_1,entity_7,10,-10.0 +user_3,default,entity_1,entity_11,10,-10.0 user_3,default,entity_1,entity_13,10,-10.0 -user_3,default,entity_1,entity_10,10,-9.0 -user_3,default,entity_1,entity_9,10,-10.0 -user_3,default,entity_0,entity_16,10,-10.0 -user_3,default,entity_0,entity_7,10,-10.0 -user_3,default,entity_10,entity_13,10,-9.0 -user_3,default,entity_10,entity_16,10,4.0 -user_3,default,entity_10,entity_7,10,-10.0 -user_3,default,entity_10,entity_15,10,9.0 -user_3,default,entity_10,entity_5,10,-10.0 -user_3,default,entity_10,entity_11,10,-9.0 -user_3,default,entity_10,entity_2,10,-10.0 -user_3,default,entity_15,entity_1,10,9.0 -user_3,default,entity_15,entity_5,10,-10.0 +user_3,default,entity_7,entity_0,10,10.0 +user_3,default,entity_7,entity_18,10,10.0 +user_3,default,entity_7,entity_5,10,-9.0 +user_3,default,entity_7,entity_13,10,-10.0 +user_3,default,entity_15,entity_7,10,-10.0 +user_3,default,entity_15,entity_11,10,-10.0 user_3,default,entity_15,entity_4,10,-10.0 -user_3,default,entity_15,entity_8,10,-10.0 -user_3,default,entity_16,entity_15,10,8.0 -user_3,default,entity_16,entity_18,10,-6.0 -user_3,default,entity_18,entity_1,10,10.0 -user_3,default,entity_18,entity_15,10,10.0 -user_3,default,entity_13,entity_18,10,10.0 -user_3,default,entity_13,entity_5,10,-10.0 -user_3,default,entity_13,entity_6,10,-10.0 +user_3,default,entity_11,entity_0,10,10.0 +user_3,default,entity_11,entity_16,10,9.0 +user_3,default,entity_11,entity_3,10,-10.0 +user_3,default,entity_12,entity_2,10,8.0 +user_3,default,entity_12,entity_8,10,-10.0 +user_3,default,entity_12,entity_4,10,-10.0 +user_3,default,entity_18,entity_12,10,-10.0 +user_3,default,entity_17,entity_15,10,5.0 +user_3,default,entity_17,entity_6,10,-7.0 +user_3,default,entity_6,entity_1,10,10.0 +user_3,default,entity_6,entity_7,10,10.0 +user_3,default,entity_6,entity_11,10,10.0 +user_3,default,entity_8,entity_10,10,10.0 +user_3,default,entity_8,entity_19,10,10.0 +user_3,default,entity_8,entity_14,10,-10.0 +user_3,default,entity_16,entity_14,10,-10.0 +user_3,default,entity_14,entity_7,10,10.0 +user_3,default,entity_14,entity_6,10,8.0 +user_3,default,entity_14,entity_3,10,0.0 +user_3,default,entity_3,entity_1,10,10.0 +user_3,default,entity_3,entity_0,10,10.0 +user_3,default,entity_3,entity_12,10,10.0 +user_3,default,entity_3,entity_6,10,9.0 +user_3,default,entity_5,entity_1,10,10.0 +user_3,default,entity_5,entity_0,10,10.0 +user_3,default,entity_5,entity_2,10,10.0 user_3,default,entity_5,entity_16,10,10.0 -user_3,default,entity_5,entity_7,10,9.0 -user_3,default,entity_5,entity_17,10,10.0 -user_3,default,entity_17,entity_3,10,-9.0 -user_3,default,entity_17,entity_12,10,10.0 -user_3,default,entity_17,entity_6,10,-10.0 -user_3,default,entity_9,entity_19,10,10.0 -user_3,default,entity_9,entity_13,10,-6.0 -user_3,default,entity_9,entity_12,10,9.0 -user_3,default,entity_9,entity_11,10,9.0 -user_3,default,entity_12,entity_0,10,10.0 -user_3,default,entity_12,entity_15,10,9.0 -user_3,default,entity_12,entity_18,10,10.0 -user_3,default,entity_19,entity_12,10,-10.0 -user_3,default,entity_19,entity_6,10,-10.0 +user_3,default,entity_5,entity_12,10,9.0 +user_3,default,entity_5,entity_17,10,9.0 +user_3,default,entity_5,entity_8,10,10.0 +user_3,default,entity_5,entity_13,10,9.0 user_3,default,entity_4,entity_1,10,10.0 -user_3,default,entity_4,entity_13,10,10.0 user_3,default,entity_4,entity_11,10,10.0 user_3,default,entity_4,entity_14,10,10.0 -user_3,default,entity_6,entity_3,10,-8.0 -user_3,default,entity_6,entity_5,10,-6.0 -user_3,default,entity_6,entity_4,10,-10.0 -user_3,default,entity_11,entity_0,10,5.0 -user_3,default,entity_11,entity_15,10,10.0 -user_3,default,entity_11,entity_5,10,-10.0 -user_3,default,entity_11,entity_6,10,-8.0 -user_3,default,entity_11,entity_14,10,-10.0 -user_3,default,entity_7,entity_11,10,-9.0 -user_3,default,entity_2,entity_0,10,10.0 -user_3,default,entity_2,entity_19,10,9.0 -user_3,default,entity_2,entity_15,10,10.0 -user_3,default,entity_2,entity_18,10,10.0 -user_3,default,entity_2,entity_17,10,-8.0 -user_3,default,entity_2,entity_4,10,-10.0 -user_3,default,entity_2,entity_11,10,-6.0 -user_3,default,entity_2,entity_8,10,-10.0 -user_3,default,entity_3,entity_2,10,10.0 -user_3,default,entity_3,entity_14,10,8.0 -user_3,default,entity_8,entity_7,10,9.0 -user_3,default,entity_8,entity_9,10,6.0 -user_3,default,entity_8,entity_4,10,-9.0 -user_3,default,entity_14,entity_1,10,10.0 -user_3,default,entity_14,entity_16,10,10.0 -user_4,default,entity_8,entity_19,10,-9.0 -user_4,default,entity_8,entity_6,10,-7.0 -user_4,default,entity_8,entity_11,10,-6.0 -user_4,default,entity_8,entity_13,10,-9.0 -user_4,default,entity_8,entity_18,10,-10.0 -user_4,default,entity_8,entity_3,10,-9.0 -user_4,default,entity_8,entity_14,10,-8.0 -user_4,default,entity_8,entity_1,10,-8.0 -user_4,default,entity_5,entity_19,10,10.0 -user_4,default,entity_5,entity_8,10,10.0 -user_4,default,entity_5,entity_2,10,9.0 -user_4,default,entity_5,entity_6,10,3.0 -user_4,default,entity_5,entity_9,10,8.0 -user_4,default,entity_5,entity_18,10,-10.0 -user_4,default,entity_5,entity_3,10,-9.0 -user_4,default,entity_5,entity_15,10,8.0 -user_4,default,entity_5,entity_14,10,-4.0 -user_4,default,entity_5,entity_1,10,-3.0 -user_4,default,entity_5,entity_16,10,-10.0 +user_3,default,entity_4,entity_5,10,10.0 +user_3,default,entity_13,entity_10,10,10.0 +user_3,default,entity_13,entity_18,10,10.0 +user_4,default,entity_6,entity_8,10,9.0 +user_4,default,entity_6,entity_11,10,7.0 +user_4,default,entity_6,entity_17,10,-10.0 +user_4,default,entity_6,entity_13,10,-10.0 +user_4,default,entity_6,entity_9,10,-9.0 +user_4,default,entity_6,entity_0,10,-9.0 +user_4,default,entity_6,entity_18,10,-7.0 +user_4,default,entity_6,entity_14,10,-9.0 +user_4,default,entity_6,entity_16,10,-9.0 +user_4,default,entity_19,entity_8,10,3.0 +user_4,default,entity_19,entity_6,10,-8.0 +user_4,default,entity_19,entity_11,10,-2.0 +user_4,default,entity_19,entity_13,10,-7.0 user_4,default,entity_19,entity_2,10,-8.0 -user_4,default,entity_19,entity_17,10,-10.0 -user_4,default,entity_19,entity_9,10,3.0 -user_4,default,entity_19,entity_13,10,-10.0 -user_4,default,entity_19,entity_18,10,-9.0 +user_4,default,entity_19,entity_0,10,-9.0 +user_4,default,entity_19,entity_10,10,-10.0 +user_4,default,entity_19,entity_18,10,-10.0 user_4,default,entity_19,entity_3,10,-10.0 -user_4,default,entity_19,entity_14,10,-10.0 -user_4,default,entity_19,entity_16,10,-10.0 -user_4,default,entity_2,entity_8,10,7.0 -user_4,default,entity_2,entity_17,10,-7.0 -user_4,default,entity_2,entity_10,10,-9.0 -user_4,default,entity_2,entity_13,10,-10.0 -user_4,default,entity_2,entity_0,10,-7.0 -user_4,default,entity_2,entity_18,10,-10.0 -user_4,default,entity_2,entity_15,10,-10.0 -user_4,default,entity_2,entity_12,10,-9.0 -user_4,default,entity_2,entity_14,10,-9.0 -user_4,default,entity_2,entity_1,10,-10.0 -user_4,default,entity_17,entity_8,10,9.0 +user_4,default,entity_11,entity_8,10,1.0 +user_4,default,entity_11,entity_17,10,-9.0 +user_4,default,entity_11,entity_4,10,-9.0 +user_4,default,entity_11,entity_0,10,-10.0 +user_4,default,entity_11,entity_5,10,-8.0 +user_4,default,entity_11,entity_14,10,-10.0 +user_4,default,entity_11,entity_3,10,-10.0 +user_4,default,entity_11,entity_12,10,-9.0 +user_4,default,entity_8,entity_17,10,-8.0 +user_4,default,entity_8,entity_13,10,-10.0 +user_4,default,entity_8,entity_9,10,-9.0 +user_4,default,entity_8,entity_2,10,-9.0 +user_4,default,entity_8,entity_0,10,-9.0 +user_4,default,entity_8,entity_15,10,-10.0 +user_4,default,entity_8,entity_5,10,-9.0 +user_4,default,entity_8,entity_1,10,-10.0 +user_4,default,entity_8,entity_18,10,-10.0 +user_4,default,entity_8,entity_14,10,-9.0 +user_4,default,entity_8,entity_3,10,-10.0 +user_4,default,entity_8,entity_7,10,-10.0 +user_4,default,entity_8,entity_16,10,-10.0 +user_4,default,entity_17,entity_19,10,10.0 +user_4,default,entity_17,entity_13,10,-8.0 +user_4,default,entity_17,entity_4,10,-7.0 +user_4,default,entity_17,entity_2,10,-5.0 user_4,default,entity_17,entity_5,10,-10.0 -user_4,default,entity_17,entity_6,10,6.0 -user_4,default,entity_17,entity_10,10,-10.0 -user_4,default,entity_17,entity_18,10,-8.0 -user_4,default,entity_17,entity_14,10,-9.0 user_4,default,entity_17,entity_1,10,-10.0 -user_4,default,entity_17,entity_7,10,-9.0 -user_4,default,entity_6,entity_19,10,-1.0 -user_4,default,entity_6,entity_2,10,-7.0 -user_4,default,entity_6,entity_13,10,-10.0 -user_4,default,entity_6,entity_4,10,-3.0 -user_4,default,entity_6,entity_12,10,-10.0 -user_4,default,entity_6,entity_14,10,-9.0 -user_4,default,entity_6,entity_1,10,-10.0 -user_4,default,entity_9,entity_8,10,3.0 -user_4,default,entity_9,entity_2,10,-5.0 -user_4,default,entity_9,entity_17,10,-5.0 -user_4,default,entity_9,entity_6,10,3.0 -user_4,default,entity_9,entity_10,10,-9.0 -user_4,default,entity_9,entity_13,10,-6.0 -user_4,default,entity_9,entity_3,10,-10.0 -user_4,default,entity_9,entity_15,10,-10.0 -user_4,default,entity_9,entity_1,10,-10.0 -user_4,default,entity_9,entity_16,10,-10.0 -user_4,default,entity_10,entity_19,10,9.0 -user_4,default,entity_10,entity_8,10,10.0 -user_4,default,entity_10,entity_5,10,9.0 -user_4,default,entity_10,entity_6,10,8.0 -user_4,default,entity_10,entity_11,10,9.0 -user_4,default,entity_10,entity_4,10,8.0 -user_4,default,entity_10,entity_0,10,8.0 -user_4,default,entity_10,entity_15,10,-7.0 -user_4,default,entity_10,entity_12,10,-10.0 -user_4,default,entity_10,entity_14,10,-9.0 -user_4,default,entity_10,entity_1,10,0.0 -user_4,default,entity_11,entity_19,10,-7.0 -user_4,default,entity_11,entity_5,10,-8.0 -user_4,default,entity_11,entity_2,10,-9.0 -user_4,default,entity_11,entity_17,10,-8.0 -user_4,default,entity_11,entity_6,10,-6.0 -user_4,default,entity_11,entity_9,10,-7.0 -user_4,default,entity_11,entity_13,10,-10.0 -user_4,default,entity_11,entity_15,10,-10.0 -user_4,default,entity_11,entity_12,10,-10.0 -user_4,default,entity_11,entity_1,10,-10.0 -user_4,default,entity_11,entity_7,10,-8.0 -user_4,default,entity_11,entity_16,10,-10.0 -user_4,default,entity_13,entity_5,10,-8.0 -user_4,default,entity_13,entity_17,10,9.0 -user_4,default,entity_13,entity_10,10,-10.0 -user_4,default,entity_13,entity_4,10,9.0 -user_4,default,entity_13,entity_0,10,-4.0 -user_4,default,entity_13,entity_18,10,-10.0 -user_4,default,entity_13,entity_3,10,-10.0 -user_4,default,entity_13,entity_15,10,10.0 -user_4,default,entity_13,entity_1,10,-9.0 -user_4,default,entity_13,entity_7,10,-6.0 -user_4,default,entity_13,entity_16,10,-9.0 -user_4,default,entity_4,entity_19,10,9.0 -user_4,default,entity_4,entity_8,10,7.0 -user_4,default,entity_4,entity_5,10,4.0 -user_4,default,entity_4,entity_2,10,9.0 -user_4,default,entity_4,entity_17,10,7.0 -user_4,default,entity_4,entity_9,10,3.0 -user_4,default,entity_4,entity_11,10,7.0 -user_4,default,entity_4,entity_0,10,-8.0 -user_4,default,entity_4,entity_18,10,-9.0 -user_4,default,entity_4,entity_3,10,-9.0 -user_4,default,entity_4,entity_15,10,-10.0 -user_4,default,entity_4,entity_12,10,-10.0 +user_4,default,entity_17,entity_18,10,-9.0 +user_4,default,entity_17,entity_14,10,-8.0 +user_4,default,entity_17,entity_7,10,-10.0 +user_4,default,entity_17,entity_16,10,-9.0 +user_4,default,entity_13,entity_11,10,9.0 +user_4,default,entity_13,entity_9,10,2.0 +user_4,default,entity_13,entity_4,10,5.0 +user_4,default,entity_13,entity_2,10,4.0 +user_4,default,entity_13,entity_15,10,-4.0 +user_4,default,entity_13,entity_1,10,7.0 +user_4,default,entity_13,entity_10,10,1.0 +user_4,default,entity_13,entity_18,10,-9.0 +user_4,default,entity_13,entity_14,10,-8.0 +user_4,default,entity_13,entity_12,10,-9.0 +user_4,default,entity_9,entity_19,10,8.0 +user_4,default,entity_9,entity_11,10,-4.0 +user_4,default,entity_9,entity_17,10,-10.0 +user_4,default,entity_9,entity_4,10,-10.0 +user_4,default,entity_9,entity_0,10,-8.0 +user_4,default,entity_9,entity_5,10,-9.0 +user_4,default,entity_9,entity_10,10,-7.0 +user_4,default,entity_9,entity_18,10,-10.0 +user_4,default,entity_9,entity_14,10,-9.0 +user_4,default,entity_9,entity_12,10,-9.0 +user_4,default,entity_4,entity_8,10,9.0 +user_4,default,entity_4,entity_6,10,6.0 +user_4,default,entity_4,entity_19,10,6.0 +user_4,default,entity_4,entity_2,10,8.0 +user_4,default,entity_4,entity_0,10,-10.0 +user_4,default,entity_4,entity_5,10,3.0 +user_4,default,entity_4,entity_18,10,-8.0 +user_4,default,entity_4,entity_3,10,-10.0 +user_4,default,entity_4,entity_12,10,-8.0 user_4,default,entity_4,entity_7,10,-10.0 -user_4,default,entity_4,entity_16,10,-10.0 -user_4,default,entity_0,entity_19,10,6.0 -user_4,default,entity_0,entity_8,10,9.0 -user_4,default,entity_0,entity_5,10,-9.0 -user_4,default,entity_0,entity_17,10,8.0 -user_4,default,entity_0,entity_6,10,7.0 -user_4,default,entity_0,entity_9,10,7.0 -user_4,default,entity_0,entity_11,10,9.0 -user_4,default,entity_0,entity_15,10,-7.0 -user_4,default,entity_0,entity_14,10,-7.0 -user_4,default,entity_18,entity_6,10,9.0 -user_4,default,entity_18,entity_9,10,10.0 -user_4,default,entity_18,entity_10,10,9.0 -user_4,default,entity_18,entity_11,10,9.0 -user_4,default,entity_18,entity_0,10,1.0 -user_4,default,entity_18,entity_3,10,-7.0 -user_4,default,entity_18,entity_15,10,-2.0 -user_4,default,entity_18,entity_14,10,-4.0 -user_4,default,entity_3,entity_2,10,7.0 -user_4,default,entity_3,entity_17,10,9.0 -user_4,default,entity_3,entity_6,10,8.0 -user_4,default,entity_3,entity_10,10,8.0 -user_4,default,entity_3,entity_11,10,10.0 -user_4,default,entity_3,entity_0,10,10.0 -user_4,default,entity_3,entity_15,10,6.0 -user_4,default,entity_3,entity_14,10,2.0 -user_4,default,entity_3,entity_1,10,10.0 -user_4,default,entity_15,entity_19,10,10.0 -user_4,default,entity_15,entity_8,10,10.0 -user_4,default,entity_15,entity_17,10,10.0 -user_4,default,entity_15,entity_6,10,7.0 -user_4,default,entity_15,entity_12,10,-6.0 -user_4,default,entity_15,entity_7,10,-8.0 +user_4,default,entity_4,entity_16,10,-9.0 +user_4,default,entity_2,entity_6,10,-1.0 +user_4,default,entity_2,entity_11,10,3.0 +user_4,default,entity_2,entity_9,10,-9.0 +user_4,default,entity_2,entity_0,10,0.0 +user_4,default,entity_2,entity_15,10,-10.0 +user_4,default,entity_2,entity_10,10,-5.0 +user_4,default,entity_2,entity_3,10,-10.0 +user_4,default,entity_0,entity_17,10,9.0 +user_4,default,entity_0,entity_13,10,-7.0 +user_4,default,entity_0,entity_15,10,10.0 +user_4,default,entity_0,entity_5,10,5.0 +user_4,default,entity_0,entity_10,10,-4.0 +user_4,default,entity_15,entity_6,10,6.0 +user_4,default,entity_15,entity_19,10,7.0 +user_4,default,entity_15,entity_11,10,9.0 +user_4,default,entity_15,entity_17,10,7.0 +user_4,default,entity_15,entity_9,10,9.0 +user_4,default,entity_15,entity_4,10,-4.0 +user_4,default,entity_15,entity_18,10,-10.0 +user_4,default,entity_15,entity_14,10,-6.0 +user_4,default,entity_15,entity_3,10,-10.0 user_4,default,entity_15,entity_16,10,-10.0 -user_4,default,entity_12,entity_19,10,10.0 -user_4,default,entity_12,entity_8,10,10.0 -user_4,default,entity_12,entity_5,10,9.0 -user_4,default,entity_12,entity_17,10,10.0 -user_4,default,entity_12,entity_9,10,10.0 -user_4,default,entity_12,entity_13,10,7.0 -user_4,default,entity_12,entity_0,10,10.0 -user_4,default,entity_12,entity_18,10,8.0 -user_4,default,entity_12,entity_3,10,0.0 -user_4,default,entity_12,entity_16,10,-4.0 -user_4,default,entity_14,entity_9,10,10.0 -user_4,default,entity_14,entity_11,10,9.0 -user_4,default,entity_14,entity_13,10,4.0 -user_4,default,entity_14,entity_4,10,6.0 -user_4,default,entity_14,entity_15,10,-3.0 -user_4,default,entity_14,entity_12,10,-7.0 -user_4,default,entity_14,entity_1,10,-1.0 +user_4,default,entity_5,entity_6,10,8.0 +user_4,default,entity_5,entity_19,10,6.0 +user_4,default,entity_5,entity_13,10,0.0 +user_4,default,entity_5,entity_2,10,7.0 +user_4,default,entity_5,entity_15,10,-5.0 +user_4,default,entity_5,entity_1,10,-7.0 +user_4,default,entity_5,entity_14,10,-10.0 +user_4,default,entity_5,entity_12,10,-9.0 +user_4,default,entity_5,entity_7,10,-10.0 +user_4,default,entity_5,entity_16,10,-7.0 +user_4,default,entity_1,entity_6,10,10.0 user_4,default,entity_1,entity_19,10,9.0 -user_4,default,entity_1,entity_4,10,2.0 -user_4,default,entity_1,entity_0,10,-8.0 -user_4,default,entity_1,entity_18,10,7.0 -user_4,default,entity_1,entity_15,10,2.0 -user_4,default,entity_1,entity_12,10,-9.0 -user_4,default,entity_1,entity_7,10,-10.0 -user_4,default,entity_1,entity_16,10,-10.0 +user_4,default,entity_1,entity_11,10,9.0 +user_4,default,entity_1,entity_9,10,10.0 +user_4,default,entity_1,entity_4,10,5.0 +user_4,default,entity_1,entity_2,10,9.0 +user_4,default,entity_1,entity_0,10,-6.0 +user_4,default,entity_1,entity_15,10,5.0 +user_4,default,entity_1,entity_10,10,-7.0 +user_4,default,entity_1,entity_18,10,3.0 +user_4,default,entity_1,entity_14,10,4.0 +user_4,default,entity_1,entity_12,10,6.0 +user_4,default,entity_10,entity_8,10,9.0 +user_4,default,entity_10,entity_6,10,8.0 +user_4,default,entity_10,entity_11,10,10.0 +user_4,default,entity_10,entity_17,10,10.0 +user_4,default,entity_10,entity_4,10,9.0 +user_4,default,entity_10,entity_15,10,9.0 +user_4,default,entity_10,entity_5,10,-1.0 +user_4,default,entity_10,entity_18,10,8.0 +user_4,default,entity_10,entity_14,10,7.0 +user_4,default,entity_10,entity_12,10,-9.0 +user_4,default,entity_10,entity_16,10,-9.0 +user_4,default,entity_18,entity_11,10,10.0 +user_4,default,entity_18,entity_2,10,10.0 +user_4,default,entity_18,entity_0,10,7.0 +user_4,default,entity_18,entity_5,10,6.0 +user_4,default,entity_18,entity_3,10,-9.0 +user_4,default,entity_18,entity_16,10,-2.0 +user_4,default,entity_14,entity_19,10,9.0 +user_4,default,entity_14,entity_4,10,7.0 +user_4,default,entity_14,entity_2,10,10.0 +user_4,default,entity_14,entity_0,10,7.0 +user_4,default,entity_14,entity_18,10,-2.0 +user_4,default,entity_14,entity_3,10,-9.0 +user_4,default,entity_14,entity_12,10,-10.0 +user_4,default,entity_14,entity_16,10,-10.0 +user_4,default,entity_3,entity_6,10,10.0 +user_4,default,entity_3,entity_17,10,10.0 +user_4,default,entity_3,entity_13,10,7.0 +user_4,default,entity_3,entity_9,10,7.0 +user_4,default,entity_3,entity_0,10,-2.0 +user_4,default,entity_3,entity_5,10,10.0 +user_4,default,entity_3,entity_1,10,1.0 +user_4,default,entity_3,entity_10,10,4.0 +user_4,default,entity_3,entity_12,10,-10.0 +user_4,default,entity_3,entity_7,10,-10.0 +user_4,default,entity_3,entity_16,10,-3.0 +user_4,default,entity_12,entity_8,10,9.0 +user_4,default,entity_12,entity_6,10,10.0 +user_4,default,entity_12,entity_19,10,9.0 +user_4,default,entity_12,entity_17,10,9.0 +user_4,default,entity_12,entity_2,10,10.0 +user_4,default,entity_12,entity_0,10,8.0 +user_4,default,entity_12,entity_15,10,7.0 +user_4,default,entity_12,entity_18,10,9.0 +user_4,default,entity_7,entity_6,10,8.0 user_4,default,entity_7,entity_19,10,10.0 -user_4,default,entity_7,entity_8,10,10.0 -user_4,default,entity_7,entity_5,10,10.0 -user_4,default,entity_7,entity_2,10,9.0 -user_4,default,entity_7,entity_6,10,9.0 +user_4,default,entity_7,entity_11,10,10.0 +user_4,default,entity_7,entity_13,10,7.0 user_4,default,entity_7,entity_9,10,10.0 -user_4,default,entity_7,entity_10,10,9.0 -user_4,default,entity_7,entity_0,10,8.0 +user_4,default,entity_7,entity_2,10,10.0 +user_4,default,entity_7,entity_0,10,9.0 +user_4,default,entity_7,entity_15,10,10.0 +user_4,default,entity_7,entity_1,10,10.0 +user_4,default,entity_7,entity_10,10,8.0 user_4,default,entity_7,entity_18,10,10.0 -user_4,default,entity_7,entity_3,10,2.0 -user_4,default,entity_7,entity_12,10,10.0 -user_4,default,entity_7,entity_14,10,10.0 -user_4,default,entity_7,entity_16,10,-6.0 -user_4,default,entity_16,entity_8,10,10.0 +user_4,default,entity_7,entity_14,10,9.0 +user_4,default,entity_7,entity_12,10,7.0 +user_4,default,entity_7,entity_16,10,9.0 +user_4,default,entity_16,entity_19,10,10.0 +user_4,default,entity_16,entity_11,10,10.0 +user_4,default,entity_16,entity_13,10,10.0 +user_4,default,entity_16,entity_9,10,8.0 user_4,default,entity_16,entity_2,10,10.0 -user_4,default,entity_16,entity_17,10,10.0 -user_4,default,entity_16,entity_6,10,10.0 -user_4,default,entity_16,entity_10,10,10.0 -user_4,default,entity_16,entity_0,10,8.0 -user_4,default,entity_16,entity_18,10,10.0 -user_4,default,entity_16,entity_3,10,8.0 -user_4,default,entity_16,entity_14,10,8.0 -user_5,default,entity_7,entity_1,10,7.0 -user_5,default,entity_7,entity_14,10,-10.0 -user_5,default,entity_7,entity_5,10,-10.0 -user_5,default,entity_7,entity_13,10,6.0 -user_5,default,entity_7,entity_6,10,10.0 -user_5,default,entity_7,entity_2,10,6.0 -user_5,default,entity_15,entity_7,10,-10.0 -user_5,default,entity_15,entity_1,10,-10.0 -user_5,default,entity_15,entity_5,10,-10.0 -user_5,default,entity_15,entity_13,10,-10.0 -user_5,default,entity_14,entity_15,10,10.0 -user_5,default,entity_14,entity_5,10,10.0 -user_5,default,entity_14,entity_13,10,10.0 -user_5,default,entity_3,entity_7,10,10.0 -user_5,default,entity_3,entity_15,10,10.0 +user_4,default,entity_16,entity_0,10,10.0 +user_4,default,entity_16,entity_1,10,10.0 +user_4,default,entity_16,entity_12,10,4.0 user_5,default,entity_3,entity_14,10,-9.0 -user_5,default,entity_3,entity_5,10,10.0 -user_5,default,entity_3,entity_13,10,10.0 +user_5,default,entity_3,entity_2,10,10.0 +user_5,default,entity_3,entity_7,10,10.0 +user_5,default,entity_3,entity_17,10,10.0 +user_5,default,entity_18,entity_3,10,-10.0 +user_5,default,entity_18,entity_14,10,-10.0 +user_5,default,entity_18,entity_2,10,-9.0 +user_5,default,entity_18,entity_4,10,-8.0 +user_5,default,entity_18,entity_1,10,8.0 +user_5,default,entity_18,entity_16,10,10.0 +user_5,default,entity_14,entity_2,10,10.0 +user_5,default,entity_14,entity_4,10,9.0 +user_5,default,entity_14,entity_6,10,10.0 +user_5,default,entity_14,entity_1,10,10.0 +user_5,default,entity_14,entity_17,10,10.0 +user_5,default,entity_4,entity_3,10,-10.0 +user_5,default,entity_4,entity_6,10,4.0 +user_5,default,entity_4,entity_7,10,-10.0 +user_5,default,entity_6,entity_3,10,-10.0 +user_5,default,entity_6,entity_18,10,9.0 +user_5,default,entity_6,entity_7,10,-8.0 +user_5,default,entity_2,entity_6,10,7.0 +user_5,default,entity_7,entity_14,10,-10.0 +user_5,default,entity_7,entity_18,10,10.0 +user_5,default,entity_7,entity_1,10,10.0 user_5,default,entity_1,entity_3,10,-10.0 -user_5,default,entity_1,entity_13,10,-9.0 -user_5,default,entity_1,entity_6,10,-10.0 -user_5,default,entity_1,entity_17,10,1.0 -user_5,default,entity_5,entity_1,10,10.0 -user_5,default,entity_6,entity_15,10,9.0 -user_5,default,entity_6,entity_14,10,-10.0 -user_5,default,entity_6,entity_13,10,6.0 -user_5,default,entity_6,entity_17,10,7.0 -user_5,default,entity_6,entity_2,10,-6.0 -user_5,default,entity_17,entity_7,10,-9.0 -user_5,default,entity_17,entity_15,10,10.0 -user_5,default,entity_17,entity_14,10,-10.0 -user_5,default,entity_17,entity_3,10,-10.0 -user_5,default,entity_17,entity_5,10,-8.0 -user_5,default,entity_17,entity_2,10,-8.0 -user_5,default,entity_13,entity_17,10,9.0 -user_5,default,entity_13,entity_2,10,-9.0 -user_5,default,entity_2,entity_1,10,10.0 -user_5,default,entity_2,entity_14,10,-10.0 -user_5,default,entity_2,entity_3,10,-9.0 -user_5,default,entity_2,entity_5,10,-9.0 -user_6,default,entity_3,entity_11,10,10.0 -user_6,default,entity_3,entity_7,10,10.0 -user_6,default,entity_3,entity_8,10,10.0 -user_6,default,entity_3,entity_18,10,10.0 -user_6,default,entity_13,entity_16,10,-9.0 -user_6,default,entity_13,entity_7,10,9.0 -user_6,default,entity_4,entity_9,10,-1.0 -user_6,default,entity_4,entity_16,10,-4.0 -user_6,default,entity_4,entity_7,10,10.0 -user_6,default,entity_4,entity_2,10,10.0 -user_6,default,entity_17,entity_4,10,10.0 +user_5,default,entity_1,entity_2,10,-10.0 +user_5,default,entity_1,entity_4,10,10.0 +user_5,default,entity_1,entity_6,10,-8.0 +user_5,default,entity_1,entity_16,10,10.0 +user_5,default,entity_1,entity_17,10,2.0 +user_5,default,entity_16,entity_3,10,-10.0 +user_5,default,entity_16,entity_14,10,-10.0 +user_5,default,entity_16,entity_2,10,-10.0 +user_5,default,entity_16,entity_4,10,-10.0 +user_5,default,entity_16,entity_6,10,-8.0 +user_5,default,entity_16,entity_7,10,-9.0 +user_5,default,entity_16,entity_17,10,-10.0 +user_5,default,entity_17,entity_18,10,2.0 +user_5,default,entity_17,entity_4,10,-8.0 +user_5,default,entity_17,entity_6,10,-10.0 +user_5,default,entity_17,entity_7,10,-10.0 +user_6,default,entity_16,entity_12,10,-10.0 +user_6,default,entity_16,entity_6,10,-10.0 +user_6,default,entity_16,entity_13,10,8.0 +user_6,default,entity_16,entity_10,10,10.0 +user_6,default,entity_3,entity_6,10,-10.0 +user_6,default,entity_3,entity_4,10,8.0 +user_6,default,entity_9,entity_12,10,-7.0 +user_6,default,entity_9,entity_8,10,7.0 +user_6,default,entity_9,entity_14,10,10.0 +user_6,default,entity_11,entity_9,10,10.0 +user_6,default,entity_11,entity_1,10,9.0 +user_6,default,entity_11,entity_7,10,10.0 +user_6,default,entity_13,entity_11,10,-9.0 +user_6,default,entity_13,entity_4,10,-3.0 +user_6,default,entity_13,entity_8,10,10.0 +user_6,default,entity_13,entity_5,10,10.0 +user_6,default,entity_17,entity_13,10,9.0 user_6,default,entity_17,entity_5,10,10.0 -user_6,default,entity_7,entity_12,10,-10.0 -user_6,default,entity_7,entity_15,10,10.0 -user_6,default,entity_7,entity_0,10,-9.0 -user_6,default,entity_8,entity_12,10,-10.0 -user_6,default,entity_8,entity_9,10,-10.0 -user_6,default,entity_8,entity_16,10,-6.0 -user_6,default,entity_8,entity_5,10,-10.0 -user_6,default,entity_14,entity_11,10,-9.0 -user_6,default,entity_14,entity_3,10,-8.0 -user_6,default,entity_14,entity_13,10,-10.0 -user_6,default,entity_14,entity_12,10,-10.0 -user_6,default,entity_14,entity_9,10,-10.0 -user_6,default,entity_14,entity_17,10,-10.0 +user_6,default,entity_12,entity_8,10,10.0 user_6,default,entity_12,entity_18,10,10.0 -user_6,default,entity_9,entity_18,10,10.0 -user_6,default,entity_9,entity_1,10,10.0 -user_6,default,entity_9,entity_5,10,10.0 -user_6,default,entity_18,entity_4,10,-10.0 -user_6,default,entity_18,entity_14,10,-9.0 -user_6,default,entity_1,entity_17,10,-9.0 -user_6,default,entity_1,entity_5,10,-9.0 -user_6,default,entity_16,entity_1,10,10.0 -user_6,default,entity_16,entity_5,10,10.0 -user_6,default,entity_11,entity_2,10,2.0 -user_6,default,entity_11,entity_0,10,10.0 -user_6,default,entity_2,entity_13,10,-7.0 -user_6,default,entity_2,entity_7,10,10.0 -user_6,default,entity_2,entity_1,10,10.0 -user_6,default,entity_2,entity_5,10,10.0 -user_6,default,entity_5,entity_4,10,-8.0 -user_6,default,entity_5,entity_15,10,10.0 -user_6,default,entity_5,entity_0,10,10.0 -user_6,default,entity_15,entity_6,10,-10.0 -user_6,default,entity_15,entity_18,10,-10.0 -user_6,default,entity_15,entity_0,10,-10.0 -user_6,default,entity_6,entity_0,10,10.0 -user_6,default,entity_0,entity_12,10,-10.0 -user_6,default,entity_0,entity_16,10,-10.0 -user_7,default,entity_0,entity_1,10,9.0 -user_7,default,entity_0,entity_10,10,9.0 -user_7,default,entity_0,entity_12,10,-9.0 -user_7,default,entity_1,entity_16,10,-10.0 -user_7,default,entity_1,entity_18,10,-9.0 -user_7,default,entity_1,entity_14,10,10.0 -user_7,default,entity_15,entity_1,10,10.0 -user_7,default,entity_15,entity_17,10,8.0 -user_7,default,entity_15,entity_6,10,8.0 -user_7,default,entity_15,entity_5,10,10.0 -user_7,default,entity_15,entity_13,10,9.0 -user_7,default,entity_15,entity_10,10,7.0 -user_7,default,entity_4,entity_8,10,-7.0 -user_7,default,entity_19,entity_0,10,-10.0 -user_7,default,entity_16,entity_19,10,9.0 -user_7,default,entity_16,entity_13,10,10.0 -user_7,default,entity_16,entity_9,10,9.0 -user_7,default,entity_3,entity_0,10,-10.0 -user_7,default,entity_11,entity_3,10,10.0 -user_7,default,entity_11,entity_5,10,10.0 -user_7,default,entity_11,entity_14,10,10.0 -user_7,default,entity_7,entity_16,10,-10.0 -user_7,default,entity_7,entity_17,10,10.0 -user_7,default,entity_8,entity_7,10,10.0 -user_7,default,entity_5,entity_7,10,-10.0 -user_7,default,entity_5,entity_6,10,-8.0 -user_7,default,entity_17,entity_13,10,4.0 -user_7,default,entity_17,entity_12,10,-10.0 -user_7,default,entity_10,entity_17,10,3.0 -user_7,default,entity_10,entity_6,10,8.0 -user_7,default,entity_2,entity_0,10,-10.0 -user_7,default,entity_2,entity_17,10,-9.0 -user_7,default,entity_2,entity_15,10,-10.0 -user_7,default,entity_9,entity_8,10,-6.0 -user_7,default,entity_9,entity_7,10,9.0 -user_7,default,entity_9,entity_13,10,6.0 -user_7,default,entity_18,entity_14,10,10.0 -user_7,default,entity_14,entity_6,10,-10.0 +user_6,default,entity_12,entity_0,10,10.0 +user_6,default,entity_12,entity_5,10,10.0 +user_6,default,entity_6,entity_8,10,10.0 +user_6,default,entity_6,entity_2,10,10.0 +user_6,default,entity_6,entity_10,10,9.0 +user_6,default,entity_6,entity_5,10,10.0 +user_6,default,entity_8,entity_3,10,-10.0 +user_6,default,entity_8,entity_18,10,9.0 +user_6,default,entity_8,entity_5,10,-7.0 +user_6,default,entity_14,entity_16,10,-7.0 +user_6,default,entity_14,entity_12,10,-10.0 +user_6,default,entity_14,entity_6,10,-10.0 +user_6,default,entity_14,entity_11,10,-10.0 +user_6,default,entity_14,entity_13,10,-5.0 +user_6,default,entity_14,entity_8,10,6.0 +user_6,default,entity_14,entity_18,10,8.0 +user_6,default,entity_14,entity_2,10,-5.0 +user_6,default,entity_14,entity_10,10,10.0 +user_6,default,entity_14,entity_1,10,9.0 +user_6,default,entity_14,entity_7,10,9.0 +user_6,default,entity_18,entity_16,10,-10.0 +user_6,default,entity_18,entity_3,10,-10.0 +user_6,default,entity_18,entity_7,10,-4.0 +user_6,default,entity_2,entity_17,10,-10.0 +user_6,default,entity_2,entity_13,10,-9.0 +user_6,default,entity_10,entity_12,10,-10.0 +user_6,default,entity_10,entity_8,10,-10.0 +user_6,default,entity_10,entity_18,10,-8.0 +user_6,default,entity_0,entity_6,10,-10.0 +user_6,default,entity_0,entity_4,10,-10.0 +user_6,default,entity_0,entity_1,10,-10.0 +user_6,default,entity_0,entity_7,10,10.0 +user_6,default,entity_5,entity_3,10,-10.0 +user_6,default,entity_5,entity_2,10,-10.0 +user_6,default,entity_1,entity_9,10,-9.0 +user_6,default,entity_1,entity_18,10,8.0 +user_6,default,entity_1,entity_7,10,10.0 +user_6,default,entity_7,entity_12,10,-10.0 +user_6,default,entity_7,entity_6,10,-9.0 +user_6,default,entity_7,entity_5,10,-10.0 +user_7,default,entity_6,entity_8,10,-10.0 +user_7,default,entity_6,entity_10,10,-2.0 +user_7,default,entity_6,entity_4,10,-6.0 +user_7,default,entity_6,entity_17,10,-5.0 user_7,default,entity_12,entity_1,10,10.0 -user_7,default,entity_12,entity_15,10,9.0 -user_7,default,entity_12,entity_5,10,10.0 -user_7,default,entity_12,entity_13,10,10.0 -user_8,default,entity_4,entity_8,10,8.0 -user_8,default,entity_4,entity_11,10,-8.0 -user_8,default,entity_8,entity_11,10,-10.0 -user_8,default,entity_8,entity_9,10,-10.0 -user_8,default,entity_8,entity_17,10,-10.0 -user_8,default,entity_8,entity_2,10,-10.0 +user_7,default,entity_12,entity_17,10,10.0 +user_7,default,entity_8,entity_13,10,9.0 +user_7,default,entity_8,entity_5,10,9.0 +user_7,default,entity_13,entity_1,10,-4.0 +user_7,default,entity_15,entity_3,10,10.0 +user_7,default,entity_15,entity_2,10,10.0 +user_7,default,entity_15,entity_0,10,-9.0 +user_7,default,entity_2,entity_3,10,10.0 +user_7,default,entity_4,entity_15,10,-7.0 +user_7,default,entity_4,entity_10,10,-8.0 +user_7,default,entity_4,entity_11,10,4.0 +user_7,default,entity_16,entity_7,10,10.0 +user_7,default,entity_16,entity_14,10,10.0 +user_7,default,entity_16,entity_0,10,-10.0 +user_7,default,entity_16,entity_11,10,10.0 +user_7,default,entity_18,entity_14,10,10.0 +user_7,default,entity_14,entity_2,10,-10.0 +user_7,default,entity_14,entity_4,10,-10.0 +user_7,default,entity_10,entity_0,10,-10.0 +user_7,default,entity_19,entity_6,10,-8.0 +user_7,default,entity_19,entity_14,10,10.0 +user_7,default,entity_1,entity_19,10,3.0 +user_7,default,entity_9,entity_12,10,-10.0 +user_7,default,entity_9,entity_6,10,10.0 +user_7,default,entity_9,entity_1,10,8.0 +user_7,default,entity_5,entity_13,10,-7.0 +user_7,default,entity_5,entity_7,10,-10.0 +user_7,default,entity_5,entity_19,10,-6.0 +user_7,default,entity_3,entity_11,10,-8.0 +user_7,default,entity_11,entity_14,10,10.0 +user_7,default,entity_17,entity_16,10,-10.0 +user_7,default,entity_17,entity_1,10,-6.0 +user_7,default,entity_17,entity_0,10,-8.0 +user_7,default,entity_17,entity_19,10,5.0 +user_8,default,entity_4,entity_8,10,9.0 +user_8,default,entity_4,entity_18,10,-10.0 +user_8,default,entity_8,entity_14,10,-10.0 +user_8,default,entity_8,entity_5,10,-9.0 +user_8,default,entity_14,entity_4,10,10.0 +user_8,default,entity_14,entity_5,10,-9.0 +user_8,default,entity_6,entity_8,10,10.0 +user_8,default,entity_6,entity_2,10,-10.0 +user_8,default,entity_6,entity_18,10,-8.0 +user_8,default,entity_9,entity_8,10,10.0 user_8,default,entity_9,entity_4,10,10.0 -user_8,default,entity_9,entity_17,10,-1.0 -user_8,default,entity_9,entity_6,10,0.0 -user_8,default,entity_17,entity_4,10,10.0 -user_8,default,entity_11,entity_17,10,-10.0 -user_8,default,entity_11,entity_18,10,-7.0 -user_8,default,entity_11,entity_5,10,-5.0 -user_8,default,entity_14,entity_4,10,9.0 -user_8,default,entity_14,entity_9,10,-9.0 -user_8,default,entity_14,entity_18,10,-10.0 -user_8,default,entity_14,entity_6,10,3.0 -user_8,default,entity_14,entity_2,10,-10.0 -user_8,default,entity_18,entity_9,10,8.0 -user_8,default,entity_6,entity_17,10,-9.0 -user_8,default,entity_6,entity_18,10,-9.0 -user_8,default,entity_6,entity_2,10,-8.0 -user_8,default,entity_5,entity_6,10,10.0 -user_8,default,entity_2,entity_9,10,10.0 -user_8,default,entity_2,entity_17,10,10.0 -user_9,default,entity_16,entity_3,10,6.0 -user_9,default,entity_16,entity_2,10,10.0 -user_9,default,entity_16,entity_14,10,10.0 -user_9,default,entity_16,entity_9,10,10.0 -user_9,default,entity_3,entity_12,10,-1.0 -user_9,default,entity_12,entity_16,10,-9.0 -user_9,default,entity_12,entity_5,10,10.0 -user_9,default,entity_12,entity_1,10,9.0 -user_9,default,entity_12,entity_0,10,10.0 +user_8,default,entity_9,entity_5,10,-6.0 +user_8,default,entity_9,entity_13,10,-10.0 +user_8,default,entity_11,entity_8,10,10.0 +user_8,default,entity_11,entity_14,10,-9.0 +user_8,default,entity_11,entity_9,10,-9.0 +user_8,default,entity_2,entity_9,10,9.0 +user_8,default,entity_2,entity_5,10,7.0 +user_8,default,entity_5,entity_6,10,7.0 +user_8,default,entity_5,entity_11,10,10.0 +user_8,default,entity_5,entity_18,10,1.0 +user_8,default,entity_13,entity_14,10,8.0 +user_8,default,entity_13,entity_6,10,10.0 +user_8,default,entity_18,entity_13,10,-3.0 +user_9,default,entity_6,entity_3,10,-10.0 +user_9,default,entity_6,entity_17,10,7.0 +user_9,default,entity_6,entity_18,10,10.0 +user_9,default,entity_6,entity_12,10,-8.0 +user_9,default,entity_3,entity_16,10,-10.0 +user_9,default,entity_17,entity_3,10,-8.0 +user_9,default,entity_17,entity_13,10,6.0 user_9,default,entity_17,entity_12,10,-10.0 -user_9,default,entity_17,entity_2,10,10.0 -user_9,default,entity_17,entity_9,10,8.0 -user_9,default,entity_17,entity_5,10,10.0 -user_9,default,entity_2,entity_3,10,-10.0 -user_9,default,entity_2,entity_11,10,-5.0 -user_9,default,entity_2,entity_5,10,-7.0 -user_9,default,entity_2,entity_0,10,10.0 -user_9,default,entity_11,entity_17,10,-10.0 -user_9,default,entity_11,entity_1,10,-9.0 -user_9,default,entity_14,entity_3,10,-10.0 +user_9,default,entity_17,entity_0,10,10.0 +user_9,default,entity_13,entity_11,10,6.0 +user_9,default,entity_13,entity_12,10,-10.0 +user_9,default,entity_11,entity_17,10,-9.0 +user_9,default,entity_11,entity_9,10,-7.0 +user_9,default,entity_18,entity_16,10,-10.0 +user_9,default,entity_18,entity_17,10,-10.0 +user_9,default,entity_18,entity_14,10,-6.0 +user_9,default,entity_18,entity_0,10,-10.0 +user_9,default,entity_12,entity_11,10,10.0 +user_9,default,entity_12,entity_14,10,10.0 +user_9,default,entity_12,entity_0,10,10.0 +user_9,default,entity_12,entity_9,10,10.0 +user_9,default,entity_14,entity_6,10,-10.0 +user_9,default,entity_14,entity_16,10,-10.0 user_9,default,entity_14,entity_17,10,-9.0 +user_9,default,entity_14,entity_0,10,-5.0 user_9,default,entity_14,entity_9,10,-10.0 -user_9,default,entity_14,entity_5,10,-9.0 -user_9,default,entity_14,entity_1,10,-9.0 -user_9,default,entity_14,entity_0,10,-10.0 -user_9,default,entity_9,entity_2,10,8.0 -user_9,default,entity_9,entity_5,10,-10.0 -user_9,default,entity_9,entity_1,10,-6.0 -user_9,default,entity_9,entity_0,10,9.0 -user_9,default,entity_5,entity_3,10,-10.0 -user_9,default,entity_5,entity_16,10,-9.0 -user_9,default,entity_1,entity_3,10,-10.0 +user_9,default,entity_0,entity_3,10,-8.0 +user_9,default,entity_0,entity_13,10,-10.0 +user_9,default,entity_0,entity_6,10,-10.0 user_9,default,entity_0,entity_16,10,-10.0 -user_9,default,entity_0,entity_11,10,-1.0 -user_9,default,entity_0,entity_1,10,-8.0 +user_9,default,entity_9,entity_6,10,-10.0 +user_9,default,entity_9,entity_18,10,10.0 +user_9,default,entity_16,entity_9,10,9.0 diff --git a/solidago/tests/load_save/generated_state/made_public.csv b/solidago/tests/load_save/generated_state/made_public.csv index fcd0a8d1d6..2a1934ee78 100644 --- a/solidago/tests/load_save/generated_state/made_public.csv +++ b/solidago/tests/load_save/generated_state/made_public.csv @@ -1,136 +1,131 @@ username,entity_name,public -user_0,entity_12,True -user_0,entity_0,True user_0,entity_16,True -user_0,entity_10,True user_0,entity_15,True +user_0,entity_10,True +user_0,entity_12,True +user_0,entity_11,True user_0,entity_18,True -user_0,entity_9,True -user_0,entity_17,True +user_0,entity_6,True +user_0,entity_2,True user_0,entity_13,True +user_0,entity_17,True +user_0,entity_9,True user_0,entity_7,True user_0,entity_14,True -user_0,entity_3,True user_0,entity_8,True -user_0,entity_5,True -user_0,entity_4,True -user_1,entity_3,True -user_1,entity_5,True -user_1,entity_9,True -user_1,entity_14,True +user_1,entity_4,True +user_1,entity_10,True +user_1,entity_15,True user_1,entity_7,True +user_1,entity_2,True user_1,entity_19,True -user_1,entity_15,True -user_1,entity_8,True +user_1,entity_1,True user_1,entity_17,True -user_1,entity_13,True -user_1,entity_10,True +user_1,entity_9,True user_1,entity_6,True -user_1,entity_0,True -user_1,entity_4,True +user_1,entity_5,True +user_1,entity_13,True user_1,entity_16,True -user_1,entity_12,True -user_1,entity_2,True -user_2,entity_8,True +user_1,entity_3,True +user_1,entity_8,True +user_1,entity_11,True user_2,entity_11,True +user_2,entity_12,True +user_2,entity_6,True +user_2,entity_10,True +user_2,entity_18,True user_2,entity_14,True +user_2,entity_9,True user_2,entity_17,True -user_2,entity_15,True user_2,entity_4,True -user_2,entity_13,True +user_2,entity_15,True +user_2,entity_0,True user_2,entity_19,True user_2,entity_5,True -user_2,entity_3,True user_2,entity_7,True -user_2,entity_1,True +user_2,entity_3,True user_2,entity_16,True +user_3,entity_1,True user_3,entity_0,True -user_3,entity_19,True -user_3,entity_16,True -user_3,entity_10,True -user_3,entity_7,True user_3,entity_15,True +user_3,entity_2,True +user_3,entity_10,True +user_3,entity_19,True user_3,entity_18,True -user_3,entity_5,True +user_3,entity_11,True +user_3,entity_12,True user_3,entity_17,True -user_3,entity_9,True -user_3,entity_4,True user_3,entity_6,True -user_3,entity_11,True -user_3,entity_2,True -user_4,entity_19,True +user_3,entity_8,True +user_3,entity_14,True +user_3,entity_3,True +user_3,entity_4,True user_4,entity_8,True -user_4,entity_5,True -user_4,entity_2,True +user_4,entity_6,True +user_4,entity_19,True user_4,entity_17,True -user_4,entity_9,True -user_4,entity_11,True user_4,entity_13,True +user_4,entity_9,True user_4,entity_4,True +user_4,entity_2,True user_4,entity_0,True +user_4,entity_5,True +user_4,entity_1,True +user_4,entity_10,True user_4,entity_18,True user_4,entity_3,True -user_4,entity_12,True -user_4,entity_14,True -user_4,entity_1,True -user_5,entity_7,True -user_5,entity_1,True -user_5,entity_15,True -user_5,entity_14,True +user_4,entity_7,True +user_4,entity_16,True user_5,entity_3,True -user_5,entity_13,True +user_5,entity_14,True +user_5,entity_18,True +user_5,entity_4,True user_5,entity_6,True +user_5,entity_7,True +user_5,entity_1,True +user_5,entity_16,True user_5,entity_17,True -user_5,entity_2,True +user_6,entity_16,True user_6,entity_6,True -user_6,entity_11,True user_6,entity_3,True -user_6,entity_13,True -user_6,entity_9,True +user_6,entity_11,True user_6,entity_17,True -user_6,entity_16,True -user_6,entity_4,True -user_6,entity_7,True -user_6,entity_8,True +user_6,entity_9,True user_6,entity_14,True user_6,entity_18,True -user_6,entity_1,True -user_6,entity_2,True +user_6,entity_10,True user_6,entity_5,True -user_6,entity_0,True -user_7,entity_0,True -user_7,entity_16,True -user_7,entity_4,True -user_7,entity_1,True -user_7,entity_17,True +user_6,entity_1,True user_7,entity_15,True +user_7,entity_12,True user_7,entity_8,True -user_7,entity_18,True -user_7,entity_19,True -user_7,entity_3,True -user_7,entity_11,True -user_7,entity_7,True +user_7,entity_10,True user_7,entity_6,True +user_7,entity_1,True user_7,entity_13,True -user_7,entity_10,True +user_7,entity_3,True +user_7,entity_18,True user_7,entity_2,True -user_7,entity_9,True user_7,entity_14,True -user_7,entity_12,True +user_7,entity_0,True +user_7,entity_19,True +user_7,entity_9,True +user_7,entity_5,True +user_7,entity_11,True +user_7,entity_17,True +user_8,entity_8,True +user_8,entity_4,True user_8,entity_11,True -user_8,entity_9,True -user_8,entity_14,True user_8,entity_18,True user_8,entity_5,True -user_8,entity_6,True -user_8,entity_2,True +user_8,entity_13,True user_9,entity_3,True +user_9,entity_13,True +user_9,entity_6,True user_9,entity_16,True user_9,entity_17,True -user_9,entity_2,True user_9,entity_11,True +user_9,entity_18,True +user_9,entity_12,True user_9,entity_14,True -user_9,entity_9,True -user_9,entity_5,True -user_9,entity_1,True user_9,entity_0,True diff --git a/solidago/tests/load_save/generated_state/vouches.csv b/solidago/tests/load_save/generated_state/vouches.csv index 9876221291..bd8a1c6f25 100644 --- a/solidago/tests/load_save/generated_state/vouches.csv +++ b/solidago/tests/load_save/generated_state/vouches.csv @@ -1,21 +1,24 @@ by,to,kind,weight,priority -user_3,user_8,Personhood,0.09393498035440484,0 -user_3,user_6,Personhood,0.6044867533457567,0 -user_3,user_0,Personhood,0.9960670856485175,0 -user_1,user_2,Personhood,0.9330825535375564,0 -user_1,user_8,Personhood,0.9988908018505851,0 -user_1,user_9,Personhood,0.8737129815357347,0 -user_1,user_3,Personhood,0.9997333800001081,0 -user_1,user_4,Personhood,0.8389908130148387,0 -user_1,user_7,Personhood,0.9900768656770113,0 -user_1,user_6,Personhood,0.24398969524785818,0 -user_1,user_0,Personhood,0.8932665338518414,0 -user_6,user_1,Personhood,0.3865438146392457,0 -user_0,user_2,Personhood,0.5566316355632999,0 -user_0,user_8,Personhood,0.820148529887458,0 -user_0,user_9,Personhood,0.9176014249118304,0 -user_0,user_3,Personhood,0.8278937779667541,0 -user_0,user_1,Personhood,0.31332771795896475,0 -user_0,user_4,Personhood,0.9978833273449196,0 -user_0,user_7,Personhood,0.8785342490885062,0 -user_0,user_6,Personhood,0.028806646041575235,0 +user_1,user_4,Personhood,0.9833949546677002,0 +user_1,user_0,Personhood,0.08528809340315868,0 +user_1,user_2,Personhood,0.18281300923230315,0 +user_1,user_8,Personhood,0.7912319527696452,0 +user_1,user_3,Personhood,0.7896824062501574,0 +user_1,user_7,Personhood,0.840778792639736,0 +user_1,user_6,Personhood,0.5238654715100963,0 +user_1,user_9,Personhood,0.8925993384032407,0 +user_0,user_1,Personhood,0.7909467137031733,0 +user_0,user_4,Personhood,0.6685105994039791,0 +user_0,user_2,Personhood,0.17400309550170712,0 +user_0,user_8,Personhood,0.9745870288432815,0 +user_0,user_3,Personhood,0.8412501415581883,0 +user_0,user_7,Personhood,0.8201966493572297,0 +user_0,user_6,Personhood,0.279133950820853,0 +user_0,user_9,Personhood,0.08035213916732376,0 +user_8,user_7,Personhood,0.9997564507524814,0 +user_8,user_9,Personhood,0.936525738441582,0 +user_3,user_1,Personhood,0.9358942194211972,0 +user_3,user_4,Personhood,0.999855129338358,0 +user_3,user_0,Personhood,0.6174821685930441,0 +user_3,user_7,Personhood,0.9734458550318215,0 +user_3,user_9,Personhood,0.021068292613971695,0 diff --git a/solidago/tests/load_save/save_tiny_tournesol/entities.csv b/solidago/tests/load_save/save_tiny_tournesol/entities.csv index d0e9f0d641..c59d0ec67a 100644 --- a/solidago/tests/load_save/save_tiny_tournesol/entities.csv +++ b/solidago/tests/load_save/save_tiny_tournesol/entities.csv @@ -1,499 +1,499 @@ entity_name -fi5mP2SL2CQ -pUYXZK7ZWHg -3yAUX9bVI34 +N1aZuY0Prow +xeMbGBw7j8g +77wnK5PR1O8 +2Z9p_I3hhUc +Y4NVHl4TxI0 +7ImimnDHZP8 +gAU7loekgbQ +R67eh75c_OQ +VNcsJYqQzlU +fDx6no-7HZE +oS5xURRP4PE +0BoRX6UrBv0 +4GXo_Ktvjmw +D2_I1y5Paqk +1tmTy5zax4w 3KIR9y488J0 -YY-YT-D8eUc -WSPCe40IDpg -W-n8BfjQ2Bw -75TjuxpG5QY -5RSIDwz2pok -Mw2GBLsCL_k -hat4UQ9zwIo -zhoU0-Jpeno -BAnf3-WAurE -73mnO1U42x0 -1ZTIN86m1k8 -DraMD0UQftI bqXhyZ10r04 -h6P0UB4nh2g -u3iJKE3PdEM -kjJqHF0mb_k -I3d_V8lRXKg -q4xZArgOIWc -XdLgFEZKSkQ -nx1k6Pznb34 -CtD0_cl2ZlA -FL-WjNQASwQ -ybkkiGtJmkM --shvArQdl8M -d3SjilKXk48 -yopl7i1ZEf4 -M_JTa5hOZd4 -TyQBfMI58ic -QE0q7Gm06U4 -GBuEgZwTaAM -2jIfDxfDohA -5D2gDhWNNNA -ju6hC1YF5TM -5opz8kvVovs +Def_sF_VE30 +B0iW2oNP2_0 +4ZX9T0kWb4Y +MjmrURLE2g0 +OS6gzabM0pI +IS7vz55_IS0 +SHUP3SLbJpU +WGh0b086Pqc +BJ8w_BVkYRI +QkFRxbXbYdQ +1ZTIN86m1k8 +EDYg5PhiTFk +3TwiqJEbO4Y +FDmZ3HFd2ro +6dK0FYzqJ_Y +gq-Ry683rxQ +G_jjoljoHg8 +M60zvmGbK7Y +AXV4TxFTLrY +kIKgF9Og9nY +9Qkxh2cXkaQ +Qj8VMXH4OCE +iQSF90BlvVo +_RsJsItLwXw +cGoWEBEEUQw +Xk0TIHjeduk Fl-POydMgCg -UXuJ8yQf6dI -ONRzXHhBMuY -Q8xsg9iK5yo -BMxKJTtb0kE -ZkMP6YD52L8 -L8lqfBccXIw -FA7G1bagOFY -28tbnAoZQ2o -xJyLv_vWZJ8 -IAdpdVVMA34 +wBLffyo9APY +FqffqlDllKU +w_YYUMISDEE +M4TUYAFZH0g +0WafDSwRi3M kj5OJN1wQyY -mDn0dK0YCEc -CClM3Ve2TNc --oRYuFFSokc -Z6tKCJhlN9U -fDx6no-7HZE -uU3NZaKo_QQ -WGvauo3JBkM -g7ih6rHdw3M -Xm-yXsm23_c -qmqqmTAKmWs -CGIEjak1xfs -gBr6Oddtgiw +gwF_eDF6Mok +zEXXe9Ef_R8 U51myW8o1YA -8KfuFPlzEYc -cdkSHa2E-rM -i5AwY7QBtrA -0g3IidBwYXo -UUdIiMOC260 -4L77Qg53Rjw -siyLoynNpNc -o1IheoDRdGE -jM2XxcnXuZ0 -R67eh75c_OQ -M60zvmGbK7Y -ipVUL-HoP_8 -SsFdKoxpuwA -J7onteN2Pgg -C_eYLWLsWPg -KE8Vhv8jmJc -8jcIC1TGpaw -Dlg1BXNYJSM -c0lVofEIKZA -ZP7T6WAK3Ow -V6ChTqII-Yk -Tt5AwEU_BiM -nh1cz49hp6Y -IdK-VL_zwvc -YKfFag72WpY -z9oRjAMwt9M -CuPxfNpreRM -21T5StHzqls -xeLr2YYV180 -Yg-8cdx7tQE -uASTqrVupZk -ojEDs-7jDFM -ULGYdXjyLo8 -KaOC9danxNo -nwVgsaNQ-Hw -77wnK5PR1O8 -wFVXUaIrEeg -nxJJg3XBYVg -r6yLdZMrjl8 -uJlGjUJGmxM -LUPa7YvKxg4 -lyvylw5Lwx0 -ECjUMoaABJA -HkvQywg_uZA -giYgMiPUJzY -ZyJLWh4UTTE -IS7vz55_IS0 --N8_BDSggGI -Qj8VMXH4OCE -FmtnjUoaano -l3CqM2vh4vc +-w_8YJ5lNNQ +I1UlinepDMs +I3d_V8lRXKg +N2ItLfhDHUs +LXVa9HCHa_M +-lAgweF53cQ +Yrf_1i_wA90 +MSgHE9Wz1QM +NaiRMMXX7YM VQ0_nkcHqkM -7x8O8F_NRYk -Mz5KA1eHj5U -gTUhSrHGl-U -R8Vz8p2w7Oo -glhLYn-DPWk -2gtwp02AiVE -OgNt1C72B_4 -_lMxXVGa4ZQ -y3xLWyZ5fy0 -6eZhm15eDjk -BqXLSlRNE_Q -KYdEryF7Yqs -iWH4VwXp8PU -wBLffyo9APY -1mjEc2V9WLk -au7YkV81buI -Xk0TIHjeduk -960lWxWCC8g -hlnZA89hVwo -AmVgss3Sc_U --kAxVe5QTGQ -BKm45Az02YE -5GFGTuCONJc -40UcIgUE6Zo -G_jjoljoHg8 -gu2Q1unqr7U -1YiDpzD42Bg -Vx8nj6MWwik -F6OcXiprsbQ -dv7Gv11pvks lNvHuv_da-A -OD7pbaGYA00 -nS3e8QvgMiE bWqUa3Aq9Xg -Urt1Cn_0BH0 -DqhXsEgLMJ0 -hRAFPdDppzs -9DT68rpXVRM -FwQntNh9N7s -hjFC3OMglj0 -lVNLfugcAvE -1UTjWy-vnOo -eIs5os8ENeo -Yrf_1i_wA90 -B2kFmFf2pTE -2cJ7pphXTM0 -4G-YQA_bsOU -68zOvCLwcL8 -dKLQ59wO3TA -O6dIx_QeoZo -o4d7WA1c_0A -RDTLXyA77iI -iGoeW8eLEl0 -JTfhYyTuT44 -lUzzPWFrWmo -IXdlXiiHUkU -Y4ICbYtBGzA -WDGAO-UGRPE -F9ffwAFJ5qk -2Z9p_I3hhUc +OD7pbaGYA00 +Vm3qhG6zpT8 +enjKj09vmsI +TyQBfMI58ic +NXqmvFy9cXE +r8mgLBT0tKY +rwzcvx3tvNI +B_mAe8Xjrt4 +73mnO1U42x0 +pUYXZK7ZWHg +qUS1Rpd_IPk +960lWxWCC8g t2GZkVRhRGQ -YVxJNhR9U4g -YzDggc7s69Y -TOTLqWwqDnk -BJ8w_BVkYRI +D9N7QaIOkG8 DwSnPJJCVdA -gMQ-yDYdgks -4iJ7WsMRmHA -cQNWI28b95I -kqFuzWHYGS8 -piodDT7BUfE -Du8-LRomE6M -NXqmvFy9cXE -tD6oCXhYB2Q -Q5feXH-QsDQ -9DZZysCluVA -p7t1mvM2SVM -O1xOQ4yJUjQ -a4Yfz2FxXiY -HKuDTwtuugk -VNcsJYqQzlU -6REilAGNKGs -QUr93cD2ZUs -6dK0FYzqJ_Y -CuU0v3iiUsI -FFhjsjRRHio -XDsclc_5_H8 -GWtQN2v4yzk -ZymwpgmlxcU -_3uHr28u2gs 7-52LX3SD24 -vVxmzJDaEeI -XJ5A7g4fXKM -527OaFpu98k -24eWLoS_hlY -0VluoJGmoUI -ZSKBJj4ldKQ -rVJh5G0zmsc -1tmTy5zax4w -XcoCbjB5zA8 -fksKuXhvWX4 -3ohGD-gErsE -aVyRLc7HYs4 -YXUSPWsokqU -BYwazHyAq6k -QbovRPMqwdE -6KNin8G-jeQ -E0z6MVZvQfk -eFJ-ze2-SqU +iGoeW8eLEl0 +1UTjWy-vnOo +XExFjhsNTKA +J7onteN2Pgg +hjFC3OMglj0 +eXsCJPBNaic +YVxJNhR9U4g +0g3IidBwYXo +HmZs6_CJ_u8 +UUdIiMOC260 +zWPe_CUR4yU +nR2YJN4OEL4 +U_r8O1Henao +V77EJ1h82es +lDoTJZABcOY +yJ_7Y0IBh0U +cjMfVe8wScM +yD6UukSbAMs +oYZhXPaNR2w C_R9CBda7vY -_PWLne79C30 +8JHJBdkasJw +b9S8LIhseE4 +95g1OgQsP3s +a8cJEL1Kub8 eC1IRvHo2Yo -jBWsi_ccz2E -WE2ukQOWBIw -K1GvDv9EhtU -Dh5gY_4SXUw -ups_V_DwpV8 -4ZX9T0kWb4Y +BzijPRaco_U +HkvQywg_uZA +eDXpK873nio +e3_lcHDy_NM +KrhDyDBHCVY +m2IM6R5Tjt8 +xMxo9pIC0GA +ipVUL-HoP_8 +Tt5AwEU_BiM +1TaphuY21tw +gu2Q1unqr7U +IAdpdVVMA34 +WYagO-nup6c +-oRYuFFSokc +DraMD0UQftI +ww_XlB6Gdls +fi5mP2SL2CQ +ONRzXHhBMuY +FmtnjUoaano +yopl7i1ZEf4 +UyJsFMG5Prw +ZSKBJj4ldKQ +lkEHvSWeMzU +QUr93cD2ZUs +2cJ7pphXTM0 +Fpu5a0Bl8eY +kw635wzOOPA +1OiiG7PNN6A +aVyRLc7HYs4 +C_eYLWLsWPg +caGX9H0OGRM +xq0N2DmDWV8 +28tbnAoZQ2o +5opz8kvVovs +wBCtHDbUsT0 +Q9Cy7njvQRM +rBSyMPV9kLI +JcsVmbmcKcI +bMMOesLMWXs +V6ChTqII-Yk +ju5XWmDg5EQ +WSPCe40IDpg +ybkkiGtJmkM +ZgDBIzClmPg +i7jaaBlXFl4 +yvavv3ZWvKY +jXepNeRTE6o +cDY1QHYwWio +OmiYf6ha_CU +SDmcoYpTTbE +Un67JkVy0xo +FA7G1bagOFY +Y4ICbYtBGzA +obPjNYm3xIA +CtD0_cl2ZlA +1NOGEzyyrRA +J6taUGrJT-w RWhMEkMtLy0 -o8JqpDgSSKY +EuBBz3bI-aA +BDQX_Whx--E +o4d7WA1c_0A +5j5xF6ZYRQY +1YiDpzD42Bg +jnL7sJYblGY +KygUNB4LHbM +a6oW35QKC-Q +AmVgss3Sc_U +3v6SLZmWUL8 +kkQ9jJiUsUc +GBuEgZwTaAM +O6dIx_QeoZo +v5ev-RAg7Xs +uUd6xf_0F6w +y3xLWyZ5fy0 +R8Vz8p2w7Oo +XcoCbjB5zA8 +d3SjilKXk48 +c0lVofEIKZA +fIwwJGhbDb8 +siyLoynNpNc +N8G-KGqn2Lg +Yrdkx-WUUhs +JrxviFuBJxE +ups_V_DwpV8 +FFhjsjRRHio +aHFGvob2oMc +SRWcOSfgXAE +eej7MLUDmXc +IXdlXiiHUkU +glhLYn-DPWk +CuU0v3iiUsI +W-n8BfjQ2Bw +r6yLdZMrjl8 +7dkDxmZPWD4 +2mMMBh4PZ_s +Xm-yXsm23_c +ECjUMoaABJA +4G-YQA_bsOU +6KNin8G-jeQ +cDNlClyvW8E tZNXVbxEw0o -fIwwJGhbDb8 -Q9Cy7njvQRM -L8XPHPRgMBk -ZqxlLaiWx7Q -EjJLlhLnliQ -gAU7loekgbQ -mu_VXk_ba-k -Def_sF_VE30 -5Kj7RFxm91M -ZFh3vILGUxY -iQSF90BlvVo +UXuJ8yQf6dI +8rr_Ymg4XiY +sAz8xySGX_8 +7Fn_wRB3kdg +NDlQrK_QAzY +h6P0UB4nh2g +BYwazHyAq6k +F9ffwAFJ5qk +gBr6Oddtgiw +VNwATZ-07nk MmOYmPM7OFE -4UKeK-pRAVI -Bbn5p78t6To -KygUNB4LHbM -xq0N2DmDWV8 -zEXXe9Ef_R8 -xZaIE1StUzg -LDyXcyF-HKs -wtxy-0tis_g -obPjNYm3xIA -m2IM6R5Tjt8 -Un67JkVy0xo -M1XWNuaKTxY +u3iJKE3PdEM +9DZZysCluVA +KE8Vhv8jmJc +QZJy_CIgABw +OgNt1C72B_4 -6k0TSNnK7U -ju5XWmDg5EQ -gwF_eDF6Mok -vt5rSAsKENY -RhW5Dl7Gu-A -0Uz7g5f8DRE -8JHJBdkasJw -koDYD-ro67M -SHUP3SLbJpU -jH1njDrAPAY -BzijPRaco_U -FDmZ3HFd2ro -w_YYUMISDEE -QcJgK4xEXbs -enjKj09vmsI -QkFRxbXbYdQ +7x8O8F_NRYk +6REilAGNKGs +nh1cz49hp6Y +2jIfDxfDohA +z9oRjAMwt9M +QoBTr_CSMzs +qmqqmTAKmWs +40UcIgUE6Zo +eIs5os8ENeo +5GFGTuCONJc +ZymwpgmlxcU +5Kj7RFxm91M +_r_lm8AQDNE +9mSpciMOvHU +cQNWI28b95I +FwQntNh9N7s +ZkMP6YD52L8 eOa35GMlgE0 -aHFGvob2oMc -EcYcIAaTeRA -mXSIBvxEKTs -lDoTJZABcOY -ww_XlB6Gdls -NDlQrK_QAzY -B_mAe8Xjrt4 -vP2TxDmVcUo -_1uN7o1PpZo -AO_yKo_z9qc -oS5xURRP4PE -p5SPFOABCGU -kkQ9jJiUsUc -VNwATZ-07nk -05HE4b8ap00 -C0B8mX1q4Mw -M4TUYAFZH0g -EfRCYDsxNwo -MSgHE9Wz1QM +qgzXuE-Xdyc +HKTo1CwEJgo +FPZONhA0C60 +0Uz7g5f8DRE +24eWLoS_hlY +EM40vrs2L78 +Mw2GBLsCL_k 7yh9i0PAjck -D_YKd6qLZAk -LXVa9HCHa_M -Y4NVHl4TxI0 -OmiYf6ha_CU -UfaKx3brLLI -caGX9H0OGRM -fu3645D4ZlI -ab2GF6r2y1g -KrhDyDBHCVY -yB3pJuuc14c -FqffqlDllKU -8w5zEYWsTns -D9wrQj15ZA8 -vU-0Z-S0Y34 -uUd6xf_0F6w -0BoRX6UrBv0 -N8G-KGqn2Lg -QXxS6q2t4DM -bPJUVKizh90 -7dkDxmZPWD4 --2l0i3zyJ2Y -Vsf7yPMzpHQ -eej7MLUDmXc -ihOblx-LG0M -yJ_7Y0IBh0U +YXUSPWsokqU +jgcjwZtUL_I +ikGPO7EC4RI +rVJh5G0zmsc k3bkNewAR5U -3v6SLZmWUL8 -rBSyMPV9kLI -vsGrFYD5Nfs -_lCpB2nX6bE -75bbNdlX2pA -tkzzz539Q3M -Fpu5a0Bl8eY -aBdymwisfb4 -8rr_Ymg4XiY -qUS1Rpd_IPk +5D2gDhWNNNA +hat4UQ9zwIo +au7YkV81buI +bPJUVKizh90 +wkwf3qMhcgQ +hRAFPdDppzs 2Zeb18Uz564 -RXnARY9741c -U_r8O1Henao -D9N7QaIOkG8 -SBwupYwDgHg -7ImimnDHZP8 -4tdyIGIEtNU -eXsCJPBNaic -gq-Ry683rxQ -EuBBz3bI-aA -b9S8LIhseE4 -FgKhjBoHyoc -NaiRMMXX7YM -95g1OgQsP3s -nR2YJN4OEL4 -t7nO7MPcOGo -fVq9P_99Vx0 -a8cJEL1Kub8 -c3HH5tGMqfE -jnL7sJYblGY -e3_lcHDy_NM -v5ev-RAg7Xs -Bd97_opoQIA -AXV4TxFTLrY -oHc688LZGBk VdpsYmo1rOI -jgcjwZtUL_I -I1UlinepDMs +L8XPHPRgMBk +zhoU0-Jpeno +oHc688LZGBk +o1IheoDRdGE +l3CqM2vh4vc +p7t1mvM2SVM +FL-WjNQASwQ +Z6tKCJhlN9U +iWH4VwXp8PU +vP2TxDmVcUo +L8lqfBccXIw +m0ezNmiLpig +p5SPFOABCGU +75TjuxpG5QY +q4xZArgOIWc +fksKuXhvWX4 +mDn0dK0YCEc C_gMPaP8x5I -gGquFWBY5cs +Mz5KA1eHj5U +L47NV190q5Q nJCIAvQk95k -r8mgLBT0tKY -1OiiG7PNN6A -N1aZuY0Prow +75bbNdlX2pA +ZyJLWh4UTTE +M_JTa5hOZd4 +Bbn5p78t6To +68zOvCLwcL8 +_lCpB2nX6bE +Bd97_opoQIA +8KfuFPlzEYc +_lMxXVGa4ZQ +uJlGjUJGmxM +FgNguPK4FuE +qgfSPqMbB-g +gTUhSrHGl-U +Dh5gY_4SXUw +qU2_LiQUNog +527OaFpu98k +kjJqHF0mb_k +Gein-qJsPQs acAdgv0NMiw -0RApKeMGDnE -UyJsFMG5Prw -XRk2VeL0icU -MjmrURLE2g0 -r1XbEmM02Z0 -jXepNeRTE6o -pwxH1i1i4ss -46QRfChKDgg -cDNlClyvW8E +izVUMXAZNA0 +nx1k6Pznb34 +M1XWNuaKTxY +P8TxHm__FZ8 +194SW2rj3OA +DqEirMq7sD0 +Yg-8cdx7tQE +g7ih6rHdw3M +o8JqpDgSSKY +05HE4b8ap00 +KYdEryF7Yqs 2neEYjbexgY -B0iW2oNP2_0 -HKTo1CwEJgo -EM40vrs2L78 +-kAxVe5QTGQ +Dlg1BXNYJSM +Dyl4qsFHNkM +hvGQMZFP9IA +UfaKx3brLLI +KLGoiyTmko0 +YKfFag72WpY +-shvArQdl8M +JTfhYyTuT44 +Vsf7yPMzpHQ +nS3e8QvgMiE +tMt0UEEqoJ8 +4UKeK-pRAVI +QcJgK4xEXbs +K1GvDv9EhtU +4L77Qg53Rjw +QSCiwe58wlc +Nj7EaryBgak +4tdyIGIEtNU +piodDT7BUfE +9DT68rpXVRM +RDTLXyA77iI -3ga3HXrrHg -UwKG23l1Xd8 -yvavv3ZWvKY -bTu_MED_PZo -2mMMBh4PZ_s -HmZs6_CJ_u8 -YFNaZzyOLVg -PgUN1uy8PYE +BMxKJTtb0kE +LUPa7YvKxg4 +lUzzPWFrWmo +uASTqrVupZk +xeLr2YYV180 f7yrUtQS09o --w_8YJ5lNNQ -WYagO-nup6c -Z8IR7rmVC9I -zWPe_CUR4yU -Nj7EaryBgak -nlTnM4bhc1U -Vm3qhG6zpT8 -QoBTr_CSMzs -QZJy_CIgABw -WHtS8Bl6lfs -wYVS_FWNhZk -oYZhXPaNR2w -LBHOIZ0_g9s +hlnZA89hVwo +nLkerPXg56Q +agu0aI4G9jg +XRk2VeL0icU +OhCzX0iLnOc +5RSIDwz2pok teLqnkYZ40I +yB3pJuuc14c +4iJ7WsMRmHA +BqXLSlRNE_Q +D9wrQj15ZA8 +ZFh3vILGUxY +jH1njDrAPAY +vU-0Z-S0Y34 +XJ5A7g4fXKM +tkzzz539Q3M +xfPKwJ7Qukc +IKQfr2H7TP4 +RXnARY9741c +Du8-LRomE6M +SBwupYwDgHg +eFJ-ze2-SqU +WE2ukQOWBIw +GWtQN2v4yzk +Q5feXH-QsDQ +2TDZkRpjv74 +3GJ-CV_K7jg +WDGAO-UGRPE +PgUN1uy8PYE +3ohGD-gErsE +a4Yfz2FxXiY +D_YKd6qLZAk +KaOC9danxNo +Vx8nj6MWwik +aBdymwisfb4 +uU3NZaKo_QQ +vt5rSAsKENY gM0N0NG2WCc -qU2_LiQUNog +Urt1Cn_0BH0 +0RApKeMGDnE +giYgMiPUJzY +QbovRPMqwdE +Q8xsg9iK5yo +EcYcIAaTeRA +vVxmzJDaEeI +QXxS6q2t4DM +SsFdKoxpuwA +EfRCYDsxNwo +IdK-VL_zwvc +lyvylw5Lwx0 +46QRfChKDgg +pwxH1i1i4ss +aIp-aa8F9EI +nxJJg3XBYVg +bRMkXCUonR8 +RhW5Dl7Gu-A +i5AwY7QBtrA +2FBIq9nvFmQ +mu_VXk_ba-k +bTu_MED_PZo +CGIEjak1xfs +CuPxfNpreRM +YzDggc7s69Y +42vajSxkkFw +nlTnM4bhc1U +_PWLne79C30 RPuQwxQtrws -_RsJsItLwXw -cGoWEBEEUQw -yZcNz2HvHtk -SRWcOSfgXAE -FPZONhA0C60 -OhCzX0iLnOc -EDYg5PhiTFk -OK7czUnuXac -oAMM3l156Oo -JrxviFuBJxE -K5f71XKwhPE -J6taUGrJT-w -1TaphuY21tw -9Qkxh2cXkaQ -3GJ-CV_K7jg -qgzXuE-Xdyc -Yrdkx-WUUhs -pecTi4mE3zM +ApADRuW1Go8 +8jcIC1TGpaw +WGvauo3JBkM +r1XbEmM02Z0 +2gtwp02AiVE +-N8_BDSggGI +dKLQ59wO3TA +CClM3Ve2TNc +F6OcXiprsbQ +XDsclc_5_H8 +_3uHr28u2gs +ab2GF6r2y1g +jM2XxcnXuZ0 +1mjEc2V9WLk E80HRbtm0k0 -aIp-aa8F9EI -xMxo9pIC0GA -P8TxHm__FZ8 -yD6UukSbAMs -agu0aI4G9jg +EjJLlhLnliQ +0VluoJGmoUI +nwVgsaNQ-Hw +WHtS8Bl6lfs +-2l0i3zyJ2Y E1Dn3F7Ili8 -QSCiwe58wlc -N2ItLfhDHUs -0VydzcKJFmw -bMMOesLMWXs -IKQfr2H7TP4 -a6oW35QKC-Q -sAz8xySGX_8 -0PbXQ97FTHc +BAnf3-WAurE +kqFuzWHYGS8 +0NlnONylg9c +Z8IR7rmVC9I +jBWsi_ccz2E +XdLgFEZKSkQ +c3HH5tGMqfE +E0z6MVZvQfk +3yAUX9bVI34 +LBHOIZ0_g9s +lVNLfugcAvE +O1xOQ4yJUjQ +yZcNz2HvHtk +cdkSHa2E-rM +C0B8mX1q4Mw +xZaIE1StUzg +koDYD-ro67M +-U9CK_DpI6s +BKm45Az02YE +fu3645D4ZlI +mXSIBvxEKTs +ojEDs-7jDFM +dv7Gv11pvks +TOTLqWwqDnk Z23TueRopH0 -eDXpK873nio -tti8b__ld1U -JcsVmbmcKcI -xfPKwJ7Qukc -_r_lm8AQDNE -xeMbGBw7j8g -LkSSy-rlKk -BDQX_Whx--E -7Fn_wRB3kdg -izVUMXAZNA0 -DqEirMq7sD0 -kw635wzOOPA -qgfSPqMbB-g -2FBIq9nvFmQ -KLGoiyTmko0 -wfb1oyiisqs -3TwiqJEbO4Y +gMQ-yDYdgks +YY-YT-D8eUc +LDyXcyF-HKs +wFVXUaIrEeg 2qAiFaTflR0 -lkEHvSWeMzU -1NOGEzyyrRA -9mSpciMOvHU -OS6gzabM0pI -FgNguPK4FuE -tMt0UEEqoJ8 -0WafDSwRi3M -5j5xF6ZYRQY -bRMkXCUonR8 -kIKgF9Og9nY +tD6oCXhYB2Q +8w5zEYWsTns +xJyLv_vWZJ8 +oAMM3l156Oo +AO_yKo_z9qc +K5f71XKwhPE +gGquFWBY5cs +wfb1oyiisqs +wtxy-0tis_g +_1uN7o1PpZo +ZqxlLaiWx7Q XUxdMbd_caw -0NlnONylg9c -42vajSxkkFw -i7jaaBlXFl4 -cjMfVe8wScM -ikGPO7EC4RI -WGh0b086Pqc -Gein-qJsPQs +ZP7T6WAK3Ow +B2kFmFf2pTE +ULGYdXjyLo8 +YFNaZzyOLVg uljTEmmCh_E -XExFjhsNTKA -194SW2rj3OA -cDY1QHYwWio --U9CK_DpI6s --lAgweF53cQ -nLkerPXg56Q -SDmcoYpTTbE -Dyl4qsFHNkM -rwzcvx3tvNI -ZgDBIzClmPg -wBCtHDbUsT0 -hvGQMZFP9IA -L47NV190q5Q -D2_I1y5Paqk -V77EJ1h82es -4GXo_Ktvjmw -m0ezNmiLpig -2TDZkRpjv74 -ApADRuW1Go8 -wkwf3qMhcgQ +6eZhm15eDjk +UwKG23l1Xd8 +HKuDTwtuugk +0VydzcKJFmw +FgKhjBoHyoc +vsGrFYD5Nfs +21T5StHzqls +t7nO7MPcOGo +DqhXsEgLMJ0 +ihOblx-LG0M +wYVS_FWNhZk +0PbXQ97FTHc +pecTi4mE3zM +QE0q7Gm06U4 +fVq9P_99Vx0 +ju6hC1YF5TM +OK7czUnuXac +tti8b__ld1U diff --git a/solidago/tests/load_save/save_tiny_tournesol/state.json b/solidago/tests/load_save/save_tiny_tournesol/state.json index 935ac78147..563e825226 100644 --- a/solidago/tests/load_save/save_tiny_tournesol/state.json +++ b/solidago/tests/load_save/save_tiny_tournesol/state.json @@ -226,8 +226,8 @@ ] }, "dataframes": { - "directs": "tests/load_save/save_tiny_tournesol/user_directs.csv", - "scalings": "tests/load_save/save_tiny_tournesol/user_scalings.csv" + "scalings": "tests/load_save/save_tiny_tournesol/user_scalings.csv", + "directs": "tests/load_save/save_tiny_tournesol/user_directs.csv" }, "default_model_cls": "DirectScoring" } diff --git a/solidago/tests/pipeline/test_user_models.py b/solidago/tests/pipeline/test_user_models.py new file mode 100644 index 0000000000..45bb80d16e --- /dev/null +++ b/solidago/tests/pipeline/test_user_models.py @@ -0,0 +1,147 @@ +import random + +import pandas as pd +import pytest + +from solidago.comparisons_to_scores import ContinuousBradleyTerry, HookeIndividualScores + +matrix_inversion = HookeIndividualScores(r_max=10) +continuous_bradley_terry = ContinuousBradleyTerry(r_max=10) + + +@pytest.mark.parametrize( + "algo", + [ + matrix_inversion, + continuous_bradley_terry, + ], +) +class TestIndividualScores: + def test_all_comparisons_zero(self, algo): + comparisons = pd.DataFrame( + [ + { + "entity_a": "video_1", + "entity_b": "video_2", + "score": 0, + }, + { + "entity_a": "video_2", + "entity_b": "video_3", + "score": 0, + }, + ] + ) + scores = algo.compute_individual_scores(comparisons) + for video in ["video_1", "video_2", "video_3"]: + assert scores.loc[video].raw_score == 0 + assert scores.loc[video].raw_uncertainty > 0 + + def test_comparisons_chain(self, algo): + comparisons = pd.DataFrame( + [ + { + "entity_a": f"video_{idx:02d}", + "entity_b": f"video_{idx+1:02d}", + "score": 10, + } + for idx in range(20) + ] + ) + scores = algo.compute_individual_scores(comparisons) + scores.sort_values("raw_score", inplace=True) + + # Video are ranked according to the chain of comparisons + assert list(scores.index) == sorted(scores.index) + + # Compared videos are indexed 0 to 20 included; video_10 is in the middle with score 0.0 + assert scores.loc["video_10"].raw_score == pytest.approx(0.0, abs=1e-4) + for idx in range(10): + assert scores.iloc[idx].raw_score == pytest.approx( + -1 * scores.iloc[20 - idx].raw_score, abs=1e-4 + ) + + def test_individual_scores_mean_is_zero(self, algo): + comparisons = [ + ("A", "B", random.randint(-10, 10)), + ("A", "C", random.randint(-10, 10)), + ("A", "D", random.randint(-10, 10)), + ("B", "C", random.randint(-10, 10)), + ("B", "D", random.randint(-10, 10)), + ("C", "D", random.randint(-10, 10)), + ] + comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) + scores = algo.compute_individual_scores(comparisons_df) + assert scores.raw_score.mean() == pytest.approx(0.0, abs=1e-4) + + def test_comparisons_strong_preferences(self, algo): + if algo is matrix_inversion: + pytest.xfail("The legacy algorithm does not preserve preferences order :( ") + + comparisons = [ + ("A", "B", 0), + ("A", "C", 0), + ("A", "D", 0), + ("B", "C", 0), + ("B", "D", 0), + ("C", "D", 0), + # strong preferences + ("A", "E", 9), + ("B", "F", 10), + ] + comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) + scores = algo.compute_individual_scores(comparisons_df) + + # F is preferred to E + assert scores.loc["F"].raw_score > scores.loc["E"].raw_score + + def test_comparisons_monotony(self, algo): + if algo is matrix_inversion: + pytest.xfail("The legacy algorithm does not preserve monotony") + + comparisons_1 = [ + ("A", "B", 8), + ("A", "C", 9), + ("A", "D", 10), + ("B", "C", 8), + ("B", "D", 9), + ("C", "D", 10), + ] + + # Move preferences towards A + comparisons_2 = [ + ("A", "B", 7), + ("A", "C", 8), + ("A", "D", 9), + ("B", "C", 8), + ("B", "D", 9), + ("C", "D", 10), + ] + + comparisons_1_df = pd.DataFrame(comparisons_1, columns=["entity_a", "entity_b", "score"]) + scores_1 = algo.compute_individual_scores(comparisons_1_df) + comparisons_2_df = pd.DataFrame(comparisons_2, columns=["entity_a", "entity_b", "score"]) + scores_2 = algo.compute_individual_scores(comparisons_2_df) + + assert scores_2.loc["A"].raw_score > scores_1.loc["A"].raw_score + + def test_comparisons_non_connex(self, algo): + comparisons = [ + # Group 1 + ("A", "B", -1), + ("A", "C", 0), + ("A", "D", 1), + # Group 2 + ("E", "F", -1), + ("E", "G", 0), + ("E", "H", 1), + ] + comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) + scores = algo.compute_individual_scores(comparisons_df) + + assert scores.loc["A"].raw_score == pytest.approx(0.0, abs=1e-4) + assert scores.loc["A"].raw_score == pytest.approx(scores.loc["E"].raw_score, abs=1e-4) + assert scores.loc["B"].raw_score == pytest.approx(scores.loc["F"].raw_score, abs=1e-4) + assert scores.loc["C"].raw_score == pytest.approx(scores.loc["G"].raw_score, abs=1e-4) + assert scores.loc["D"].raw_score == pytest.approx(scores.loc["H"].raw_score, abs=1e-4) + diff --git a/solidago/tests/state/test_entities.py b/solidago/tests/state/test_entities.py index 76b591a2c0..4b2f2258bb 100644 --- a/solidago/tests/state/test_entities.py +++ b/solidago/tests/state/test_entities.py @@ -12,6 +12,10 @@ def test_entities(): assert entities.get("entity_0")["title"] == "Hello World" assert len(entities.get({"entity_0", "entity_2"})) == 2 +def test_entities2(): + entities = Entities(["entity_1", "entity_2"]) + assert set(entities.index) == {"entity_1", "entity_2"} + def test_vector_entities(): entities = VectorEntities(np.array([ [0, 1, 2], diff --git a/solidago/tests/state/test_models.py b/solidago/tests/state/test_models.py index e69de29bb2..5c3017b78f 100644 --- a/solidago/tests/state/test_models.py +++ b/solidago/tests/state/test_models.py @@ -0,0 +1,42 @@ +import pytest +from solidago import * + +def test_score(): + assert Score(1, 0, 0) + Score(1, 0, 0) == Score(2, 0, 0) + assert Score(1, 1, 0) + Score(1, 0, 1) == Score(2, 1, 1) + assert (Score(1, 1, 0) * Score(1, 0, 1)).max == 2 + assert Score(1, 1, 1) < Score(3, 0, 2) + assert Score(1, 1, 2) >= Score(3, 0, 2) + assert not (Score(1, 1, 2) <= Score(-3, 0, 2)) + assert 4 not in Score(-3, 0, 2).abs() + +def test_multiscore(): + s = MultiScore({ + "default": (1, 4, 2), + "importance": Score(2, 1, 0) + }) + s.add_row("fun", Score(1, 0, 2)) + assert s["fun"] + s["importance"] == Score(3, 1, 2) + assert s["diversity"].isnan() + t = MultiScore({ + "default": (1, 0, 0) + }) + assert (s*t)["default"] == s["default"] + assert (s*t)["importance"].isnan() + assert (s+t)["default"].average_uncertainty() == 3 + +def test_direct(): + direct = DirectScoring() + entities = Entities(["entity_1", "entity_2"]) + direct["entity_1", "default"] = Score(1, 5, 2) + direct["entity_2", "default"] = (2, 3, 1) + direct["entity_2", "importance"] = (2, 0, 1) + scaled = ScaledModel(direct, ScaleDict({ + "default": (1, 0, 0, 1, 0, 0), + "importance": (2, 1, 1, 3, 2, 0) + })) + post_process = SquashedModel(scaled, 100) + assert post_process("entity_1")["importance"].isnan() + assert post_process("entity_2")["importance"] > 0 + assert len(post_process(entities)) == 3 + assert scaled(entities)["entity_1", "default"] == Score(2, 5, 2) diff --git a/solidago/tests/state/test_user_models.py b/solidago/tests/state/test_user_models.py index 45bb80d16e..af4dd7233b 100644 --- a/solidago/tests/state/test_user_models.py +++ b/solidago/tests/state/test_user_models.py @@ -1,147 +1,42 @@ -import random - -import pandas as pd import pytest - -from solidago.comparisons_to_scores import ContinuousBradleyTerry, HookeIndividualScores - -matrix_inversion = HookeIndividualScores(r_max=10) -continuous_bradley_terry = ContinuousBradleyTerry(r_max=10) - - -@pytest.mark.parametrize( - "algo", - [ - matrix_inversion, - continuous_bradley_terry, - ], -) -class TestIndividualScores: - def test_all_comparisons_zero(self, algo): - comparisons = pd.DataFrame( - [ - { - "entity_a": "video_1", - "entity_b": "video_2", - "score": 0, - }, - { - "entity_a": "video_2", - "entity_b": "video_3", - "score": 0, - }, - ] - ) - scores = algo.compute_individual_scores(comparisons) - for video in ["video_1", "video_2", "video_3"]: - assert scores.loc[video].raw_score == 0 - assert scores.loc[video].raw_uncertainty > 0 - - def test_comparisons_chain(self, algo): - comparisons = pd.DataFrame( - [ - { - "entity_a": f"video_{idx:02d}", - "entity_b": f"video_{idx+1:02d}", - "score": 10, - } - for idx in range(20) - ] - ) - scores = algo.compute_individual_scores(comparisons) - scores.sort_values("raw_score", inplace=True) - - # Video are ranked according to the chain of comparisons - assert list(scores.index) == sorted(scores.index) - - # Compared videos are indexed 0 to 20 included; video_10 is in the middle with score 0.0 - assert scores.loc["video_10"].raw_score == pytest.approx(0.0, abs=1e-4) - for idx in range(10): - assert scores.iloc[idx].raw_score == pytest.approx( - -1 * scores.iloc[20 - idx].raw_score, abs=1e-4 - ) - - def test_individual_scores_mean_is_zero(self, algo): - comparisons = [ - ("A", "B", random.randint(-10, 10)), - ("A", "C", random.randint(-10, 10)), - ("A", "D", random.randint(-10, 10)), - ("B", "C", random.randint(-10, 10)), - ("B", "D", random.randint(-10, 10)), - ("C", "D", random.randint(-10, 10)), - ] - comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) - scores = algo.compute_individual_scores(comparisons_df) - assert scores.raw_score.mean() == pytest.approx(0.0, abs=1e-4) - - def test_comparisons_strong_preferences(self, algo): - if algo is matrix_inversion: - pytest.xfail("The legacy algorithm does not preserve preferences order :( ") - - comparisons = [ - ("A", "B", 0), - ("A", "C", 0), - ("A", "D", 0), - ("B", "C", 0), - ("B", "D", 0), - ("C", "D", 0), - # strong preferences - ("A", "E", 9), - ("B", "F", 10), - ] - comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) - scores = algo.compute_individual_scores(comparisons_df) - - # F is preferred to E - assert scores.loc["F"].raw_score > scores.loc["E"].raw_score - - def test_comparisons_monotony(self, algo): - if algo is matrix_inversion: - pytest.xfail("The legacy algorithm does not preserve monotony") - - comparisons_1 = [ - ("A", "B", 8), - ("A", "C", 9), - ("A", "D", 10), - ("B", "C", 8), - ("B", "D", 9), - ("C", "D", 10), - ] - - # Move preferences towards A - comparisons_2 = [ - ("A", "B", 7), - ("A", "C", 8), - ("A", "D", 9), - ("B", "C", 8), - ("B", "D", 9), - ("C", "D", 10), - ] - - comparisons_1_df = pd.DataFrame(comparisons_1, columns=["entity_a", "entity_b", "score"]) - scores_1 = algo.compute_individual_scores(comparisons_1_df) - comparisons_2_df = pd.DataFrame(comparisons_2, columns=["entity_a", "entity_b", "score"]) - scores_2 = algo.compute_individual_scores(comparisons_2_df) - - assert scores_2.loc["A"].raw_score > scores_1.loc["A"].raw_score - - def test_comparisons_non_connex(self, algo): - comparisons = [ - # Group 1 - ("A", "B", -1), - ("A", "C", 0), - ("A", "D", 1), - # Group 2 - ("E", "F", -1), - ("E", "G", 0), - ("E", "H", 1), - ] - comparisons_df = pd.DataFrame(comparisons, columns=["entity_a", "entity_b", "score"]) - scores = algo.compute_individual_scores(comparisons_df) - - assert scores.loc["A"].raw_score == pytest.approx(0.0, abs=1e-4) - assert scores.loc["A"].raw_score == pytest.approx(scores.loc["E"].raw_score, abs=1e-4) - assert scores.loc["B"].raw_score == pytest.approx(scores.loc["F"].raw_score, abs=1e-4) - assert scores.loc["C"].raw_score == pytest.approx(scores.loc["G"].raw_score, abs=1e-4) - assert scores.loc["D"].raw_score == pytest.approx(scores.loc["H"].raw_score, abs=1e-4) - +from solidago import * + +def test_user_models(): + entities = Entities(["entity_1", "entity_2", "entity_3"]) + user_models = UserModels({ + "aidjango": DirectScoring({ + "entity_1": { + "default": (2, 1, 1), + "importance": (0, 1, 1), + }, + "entity_2": { + "default": (-1, 1, 1), + "importance": (3, 1, 10), + }, + "entity_3": { + "default": (0, 0, 1), + }, + }), + "le_science4all": DirectScoring({ + "entity_1": { + "default": (0, 0, 0), + "importance": (-3, 1, 1), + }, + "entity_2": { + "default": (-1, 0, 1), + }, + }) + }) + scaled_models = UserModels({ + username: ScaledModel(model, ScaleDict({ + "default": (2, 0, 0, 1, 0, 0), + "importance": (1, 0, 1, 3, 2, 2), + })) for username, model in user_models + }) + processed_models = UserModels({ + username: SquashedModel(model, 100) + for username, model in scaled_models + }) + assert processed_models(entities)["le_science4all", "entity_1", "importance"].value == 0 + assert processed_models["aidjango"]("entity_3")["importance"].isnan() + assert processed_models["aidjango"]("entity_2")["importance"] > 0