Skip to content

Commit e14bf83

Browse files
committed
Passed VotingRights, MadePublic and Vouch
Next is Assessments and Comparisons
1 parent 2f7fa65 commit e14bf83

File tree

26 files changed

+1941
-1911
lines changed

26 files changed

+1941
-1911
lines changed

solidago/src/solidago/generators/assessment/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def __call__(self,
1818
assessment=assessment,
1919
user=users.get(username),
2020
entity=entities.get(entity_name),
21-
public=made_public[username, entity_name],
21+
public=made_public.get(username, entity_name),
2222
criterion=criterion
2323
)
2424
result.add_row((username, criterion, entity_name), assessment)

solidago/src/solidago/generators/comparison/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def __call__(self,
2121
user=users.get(username),
2222
left=entities.get(left_name),
2323
right=entities.get(right_name),
24-
left_public=made_public[username, left_name],
25-
right_public=made_public[username, right_name],
24+
left_public=made_public.get(username, left_name),
25+
right_public=made_public.get(username, right_name),
2626
criterion=criterion
2727
)
2828
result.add_row((username, criterion, left_name, right_name), comparison)

solidago/src/solidago/generators/engagement/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def __call__(self, users: Users, entities: Entities) -> tuple[MadePublic, Assess
1111
eval_entities = self.sample_evaluated_entities(user, entities)
1212
for index, entity in enumerate(eval_entities):
1313
public = self.public(user, entity, eval_entities)
14-
made_public[user, entity] = public
14+
made_public.set(public, user, entity)
1515
assess = self.assess(user, entity, eval_entities)
1616
if assess:
1717
assessments.add(user, "default", entity)

solidago/src/solidago/generators/vouch/erdos_renyi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ def __call__(self, users: Users) -> Vouches:
2525
p_vouch = users.loc[voucher_name, "n_expected_vouches"] / (len(usernames_subset) - 1)
2626
for vouchee_name in usernames_subset:
2727
if (voucher_name != vouchee_name) and (random() < p_vouch):
28-
vouches[voucher_name, vouchee_name, "Personhood"] = 1 - random()**2, 0
28+
vouches.set((1 - random()**2, 0), voucher_name, vouchee_name, "Personhood")
2929

3030
return vouches

solidago/src/solidago/modules/scaling/mehestan.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def compute_scales(self,
116116
scores: MultiScore
117117
Must have key_names == ["criterion", "username", "entity_name"]
118118
made_public: MadePublic
119-
Must have key_names == ["criterion", "username", "entity_name"]
119+
Must have key_names == ["username", "entity_name"]
120120
121121
Returns
122122
-------
@@ -276,9 +276,8 @@ def compute_activities(self,
276276
activities[i] is a measure of user i's trustworthy activeness,
277277
where i is the iloc of the user in users
278278
"""
279-
made_public = made_public.reorder_keys(["username", "entity_name"])
280279
return np.array([
281-
self.compute_user_activities(trusts[user], made_public[user], scores[user])
280+
self.compute_user_activities(trusts[user], made_public.get(user), scores[user])
282281
for user in users
283282
])
284283

@@ -420,7 +419,7 @@ def compute_model_norms(self,
420419
out[username] is the norm of user's score vector
421420
"""
422421
return {
423-
username: self.compute_model_norm(made_public[username], scores[username])
422+
username: self.compute_model_norm(made_public.get(username), scores[username])
424423
for username in scores.get_set("username")
425424
}
426425

@@ -510,7 +509,7 @@ def ratios(self,
510509
weight_list, ratio_list = self.compute_ratios(
511510
scalee_scores[scalee_name],
512511
scaler_scores[scaler_name],
513-
made_public[scaler_name],
512+
made_public.get(scaler_name),
514513
pairs
515514
)
516515
if weight_list:

solidago/src/solidago/modules/trust_propagation/lipschitrust.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ def __call__(self, users: Users, vouches: Vouches) -> Users:
6666
users["trust_score"] = list()
6767
return users
6868

69-
vouches = vouches[any, any, "Personhood"]
70-
total_vouches = NestedDictOfItems({
71-
voucher_name: vouches[voucher_name].to_df()["weight"].sum()
72-
for voucher_name in vouches.get_set("by")
73-
}, key_names=["voucher_name"], default_value=0)
69+
vouches = vouches.get(kind="Personhood")
70+
total_vouches = {
71+
voucher_name: voucher_vouches["weight"].sum()
72+
for voucher_name, voucher_vouches in vouches.iter(["by"])
73+
}
7474
pretrusts = users["is_pretrusted"] * self.pretrust_value
7575
trusts = pretrusts.copy()
7676

solidago/src/solidago/modules/voting_rights/affine_overtrust.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def __call__(self,
5858
evaluators = assessments[criterion, entity_name].get_set("username")
5959
evaluators |= ordered_comparisons[entity_name].get_set("username")
6060
trust_scores = { u: users.loc[u, "trust_score"] for u in evaluators }
61-
public = { u: made_public[u, entity_name] for u in evaluators }
61+
public = { u: made_public.get(u, entity_name) for u in evaluators }
6262

6363
sub_voting_rights, statistics = self.sub_main(trust_scores, public)
6464
sub_voting_rights[["criterion", "entity_name"]] = criterion, entity_name

solidago/src/solidago/modules/voting_rights/is_trust.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ def __call__(self,
2929
for entity in entities:
3030
for criterion in criteria:
3131
penalty = made_public.penalty(self.privacy_penalty, user, entity)
32-
voting_rights.add_row(
33-
username=str(user),
34-
entity_name=str(entity),
35-
criterion=str(criterion),
36-
voting_right=penalty * user["trust_score"]
37-
)
32+
voting_rights.set(penalty * user["trust_score"], user, entity, criterion)
3833

3934
return voting_rights

solidago/src/solidago/primitives/datastructure/unnamed_dataframe.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class UnnamedDataFrame(DataFrame):
1212
def __init__(self,
1313
key_names: Optional[Union[str, list[str]]]=None,
1414
value_names: Optional[Union[str, list[str]]]=None,
15-
save_filename: Optional[str]=None,
15+
name: Optional[str]=None,
1616
default_value: Optional[Any]=None,
1717
last_only: bool=False,
1818
*args,
@@ -22,15 +22,14 @@ def __init__(self,
2222
super().__init__(*args, **kwargs)
2323
to_list = lambda l: [l] if isinstance(l, str) else l
2424
self.meta = SimpleNamespace()
25-
self.meta.save_filename = save_filename
25+
self.meta.name = name
2626
self.meta.key_names, self.meta.value_names = to_list(key_names), to_list(value_names)
2727
assert isinstance(self.key_names, list) or not self.key_names
2828
assert isinstance(self.value_names, list) or not self.value_names
2929
columns = sum([ n if n else list() for n in (self.key_names, self.value_names) ], list())
3030
for column in columns:
3131
if column not in self.columns:
3232
self[column] = float("nan")
33-
self.meta.save_filename = save_filename
3433
self.meta._default_value = default_value
3534
self.meta._last_only = last_only
3635

@@ -42,19 +41,16 @@ def key_names(self):
4241
def value_names(self):
4342
return self.meta.value_names
4443

45-
@property
46-
def save_filename(self):
47-
return self.meta.save_filename
48-
4944
""" The following methods could be worth redefining in derived classes """
45+
@property
5046
def default_value(self) -> Any:
5147
return self.meta._default_value
5248

5349
def value2row(self, value: Optional[Any]=None, **kwargs) -> Series:
5450
if value is None:
5551
value = dict()
5652
elif isinstance(value, (dict, Series)):
57-
value = dict(value)
53+
value = { key: v for key, v in value.items() }
5854
elif isinstance(value, Iterable):
5955
value = { self.value_names[index]: v for index, v in enumerate(value) }
6056
else:
@@ -73,7 +69,7 @@ def row2value(self, row: Series) -> Any:
7369
return row
7470
if len(self.value_names) == 1:
7571
return row[self.value_names[0]]
76-
return [ row[name] for name in self.value_names ]
72+
return tuple( row[name] for name in self.value_names )
7773

7874
def df2value(self, df: DataFrame, last_only: Optional[bool]=None) -> Any:
7975
last_only = self.meta._last_only if last_only is None else last_only
@@ -84,30 +80,33 @@ def df2value(self, df: DataFrame, last_only: Optional[bool]=None) -> Any:
8480
""" The following methods are are more standard """
8581
def add_row(self, value: Optional[Any]=None, **kwargs) -> None:
8682
self.index = list(range(len(self)))
87-
self.loc[len(self)] = self.value2row(value, **kwargs) if value else Series(kwargs)
83+
kwargs = { k: (str(v) if k in self.key_names else v) for k, v in kwargs.items() }
84+
self.loc[len(self)] = Series(kwargs) if value is None else self.value2row(value, **kwargs)
8885

8986
def get(self,
9087
*args,
9188
process: bool=True,
9289
last_only: Optional[bool]=None,
9390
**kwargs
94-
) -> "UnnamedDataFrame":
91+
) -> Union["UnnamedDataFrame", tuple]:
9592
assert len(args) <= len(self.key_names)
9693
assert all({ key not in self.key_names[:len(args)] for key in kwargs })
97-
kwargs |= { key: value for key, value in zip(self.key_names[:len(args)], args) }
94+
kwargs = { k: str(v) for k, v in kwargs.items() }
95+
kwargs |= { key: str(value) for key, value in zip(self.key_names[:len(args)], args) }
9896
df = self[reduce(lambda a, x: a & x, [ self[k] == v for k, v in kwargs.items() ], True)]
9997
key_names = [ n for n in self.key_names if n not in kwargs ]
10098
if key_names or not process:
10199
return type(self)(df, key_names=key_names)
102-
return self.default_value() if df.empty else self.df2value(df, last_only)
100+
return self.default_value if df.empty else self.df2value(df, last_only)
103101

104-
def __contains__(self, **kwargs) -> bool:
105-
return not self.get(**kwargs).empty
102+
def __contains__(self, *args, **kwargs) -> bool:
103+
return not self.get(*args, **kwargs).empty
106104

107105
def set(self, value: Optional[Any]=None, *args, **kwargs) -> None:
108106
assert len(args) <= len(self.key_names)
109107
assert all({ key not in self.key_names[:len(args)] for key in kwargs })
110-
kwargs |= { k: v for k, v in zip(self.key_names[:len(args)], args) }
108+
kwargs = { k: str(v) for k, v in kwargs.items() }
109+
kwargs |= { k: str(v) for k, v in zip(self.key_names[:len(args)], args) }
111110
df = self.get(process=False, **kwargs)
112111
if df.empty:
113112
self.add_row(value, **kwargs)
@@ -155,8 +154,8 @@ def values(self, process: bool=True) -> list:
155154
return [ value for _, value in self ]
156155

157156
def save(self, directory: Union[str, Path]) -> tuple[str, str]:
158-
assert self.save_filename is not None, f"{type(self).__name__} has no save filename"
159-
path = Path(directory) / self.save_filename
157+
assert self.meta.name is not None, f"{type(self).__name__} has no save filename"
158+
path = Path(directory) / f"{self.meta.name}.csv"
160159
self.to_csv(path, index=False)
161160
return type(self).__name__, str(path)
162161

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,32 @@
1-
from typing import Optional, Union
2-
from pandas import DataFrame
3-
from pathlib import Path
1+
from typing import Optional, Any
42

53
from .base import MadePublic
6-
from solidago.primitives.datastructure import NestedDictOfItems
74

85

9-
class AllPublic(NestedDictOfItems):
6+
class AllPublic(MadePublic):
107
def __init__(self,
11-
d: Optional[Union[dict, DataFrame]]=None,
8+
data: Optional[Any]=None,
129
key_names=["username", "entity_name"],
1310
value_name="public",
14-
save_filename="made_public.csv"
11+
name="made_public",
12+
default_value=True,
13+
last_only=True,
14+
**kwargs
1515
):
16-
super().__init__(d, key_names, value_name, save_filename, default_value=True)
16+
super().__init__(data, key_names, value_name, name, default_value, last_only, **kwargs)
1717

18-
def __setitem__(self, keys: Union[str, tuple, list], value: bool) -> None:
18+
def add_row(*args, **kwargs):
19+
pass
20+
21+
def set(*args, **kwargs):
1922
pass
2023

2124
def penalty(self, privacy_penalty: float, *keys) -> float:
2225
return 1
26+
27+
@classmethod
28+
def load(cls, *args, **kwargs) -> "AllPublic":
29+
return cls()
30+
31+
def save(self, *arg, **kwargs) -> tuple[str, str]:
32+
return type(self).__name__, None

0 commit comments

Comments
 (0)