Skip to content

Commit

Permalink
Fix mypy errors
Browse files Browse the repository at this point in the history
  • Loading branch information
evangriffiths committed Feb 27, 2024
1 parent 3a528d0 commit facd307
Show file tree
Hide file tree
Showing 7 changed files with 16 additions and 19 deletions.
1 change: 0 additions & 1 deletion prediction_market_agent_tooling/markets/agent_market.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ class AgentMarket(BaseModel):
id: str
question: str
outcomes: list[str]
currency: t.ClassVar[Currency]
resolution: t.Optional[Resolution] = None
created_time: datetime
p_yes: Probability
Expand Down
2 changes: 1 addition & 1 deletion prediction_market_agent_tooling/markets/manifold/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get_manifold_binary_markets(
] = "open",
created_after: t.Optional[datetime] = None,
) -> list[ManifoldMarket]:
all_markets = []
all_markets: list[ManifoldMarket] = []

url = "https://api.manifold.markets/v0/search-markets"
params: dict[str, t.Union[str, int, float]] = {
Expand Down
2 changes: 2 additions & 0 deletions prediction_market_agent_tooling/markets/manifold/manifold.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,15 @@ def get_binary_markets(
filter_by: FilterBy = FilterBy.OPEN,
created_after: t.Optional[datetime] = None,
) -> list[AgentMarket]:
sort: t.Literal["liquidity", "score", "newest", "close-date"]
if sort_by == SortBy.CLOSING_SOONEST:
sort = "close-date"
elif sort_by == SortBy.NEWEST:
sort = "newest"
else:
raise ValueError(f"Unknown sort_by: {sort_by}")

filter_: t.Literal["open", "resolved"]
if filter_by == FilterBy.OPEN:
filter_ = "open"
elif filter_by == FilterBy.RESOLVED:
Expand Down
13 changes: 4 additions & 9 deletions prediction_market_agent_tooling/markets/omen/data_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,6 @@ def outcomeTokenProbabilities(self) -> t.Optional[list[Probability]]:
else None
)

@property
def p_yes(self) -> Probability:
return check_not_none(
self.outcomeTokenProbabilities,
"outcomeTokenProbabilities not available",
)[self.outcomes.index(OMEN_TRUE_OUTCOME)]

@property
def p_no(self) -> Probability:
return Probability(1 - self.p_yes)
Expand Down Expand Up @@ -151,7 +144,7 @@ def get_resolution_enum(self) -> t.Optional[Resolution]:
if self.boolean_outcome:
return Resolution.YES
else:
Resolution.NO
return Resolution.NO


class OmenBetCreator(BaseModel):
Expand Down Expand Up @@ -244,6 +237,8 @@ def to_generic_resolved_bet(self) -> ResolvedBet:
created_time=datetime.fromtimestamp(self.creationTimestamp),
market_question=self.title,
market_outcome=self.fpmm.boolean_outcome,
resolved_time=datetime.fromtimestamp(self.fpmm.resolutionTimestamp), # type: ignore # TODO Mypy doesn't understand that self.fpmm.is_resolved is True and therefore timestamp is known non-None
resolved_time=datetime.fromtimestamp(
check_not_none(self.fpmm.resolutionTimestamp)
),
profit=self.get_profit(),
)
6 changes: 4 additions & 2 deletions prediction_market_agent_tooling/markets/omen/omen.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,9 @@ def from_data_model(model: OmenMarket) -> "OmenAgentMarket":
collateral_token_contract_address_checksummed=model.collateral_token_contract_address_checksummed,
market_maker_contract_address_checksummed=model.market_maker_contract_address_checksummed,
resolution=model.get_resolution_enum() if model.is_resolved else None,
created_time=datetime.fromtimestamp(model.creationTimestamp),
created_time=datetime.fromtimestamp(model.creationTimestamp)
if model.creationTimestamp
else datetime.min,
p_yes=model.p_yes,
)

Expand Down Expand Up @@ -273,7 +275,7 @@ def get_arbitrator_contract_address_and_abi(
raise ValueError(f"Unknown arbitrator: {arbitrator}")


def ordering_from_sort_by(sort_by: SortBy) -> str:
def ordering_from_sort_by(sort_by: SortBy) -> tuple[str, str]:
"""
Returns 'orderBy' and 'orderDirection' strings for the given SortBy.
"""
Expand Down
4 changes: 1 addition & 3 deletions prediction_market_agent_tooling/monitor/monitor_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,7 @@ def get_open_and_resolved_markets(
start_time: datetime,
market_type: MarketType,
) -> tuple[list[AgentMarket], list[AgentMarket]]:
cls = MARKET_TYPE_MAP.get(market_type)
if market_type is None:
raise ValueError(f"Unknown market type: {market_type}")
cls = check_not_none(MARKET_TYPE_MAP.get(market_type))

open_markets = cls.get_binary_markets(
limit=MAX_MONITOR_MARKETS,
Expand Down
7 changes: 4 additions & 3 deletions tests/markets/test_omen.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
get_omen_binary_markets,
pick_binary_market,
)
from prediction_market_agent_tooling.tools.utils import check_not_none
from tests.utils import RUN_PAID_TESTS


Expand Down Expand Up @@ -75,15 +76,15 @@ def test_get_bets() -> None:
)


def test_p_yes():
def test_p_yes() -> None:
# Find a market with outcomeTokenMarginalPrices and verify that p_yes is correct.
for m in get_omen_binary_markets(
limit=200,
sort_by=SortBy.NEWEST,
filter_by=FilterBy.OPEN,
):
if m.outcomeTokenProbabilities:
if m.outcomeTokenProbabilities is not None:
market = m
break
assert market is not None, "No market found with outcomeTokenProbabilities."
assert np.isclose(market.p_yes, market.outcomeTokenProbabilities[0])
assert np.isclose(market.p_yes, check_not_none(market.outcomeTokenProbabilities)[0])

0 comments on commit facd307

Please sign in to comment.