__init__.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from typing import Dict, Tuple, List
  2. from .shared import PointSource
  3. from .map_crunch import MapCrunchPointSource
  4. from .random_street_view import RSVPointSource
  5. from .urban_centers import UrbanPointSource
  6. from ..schemas import GenMethodEnum, GameConfig, CacheInfo
  7. stock_target = 20
  8. """
  9. Dictionary of PointSources
  10. Maps (generation_method, only_america) -> PointSource
  11. """
  12. sources: Dict[Tuple[GenMethodEnum, bool], PointSource] = {
  13. (GenMethodEnum.map_crunch, False): MapCrunchPointSource(stock_target=stock_target, max_retries=1000, only_america=False),
  14. (GenMethodEnum.map_crunch, True): MapCrunchPointSource(stock_target=stock_target, max_retries=1000, only_america=True),
  15. (GenMethodEnum.rsv, False): RSVPointSource(stock_target=stock_target, only_america=False),
  16. (GenMethodEnum.rsv, True): RSVPointSource(stock_target=stock_target, only_america=True),
  17. (GenMethodEnum.urban, False): UrbanPointSource(
  18. stock_target=stock_target,
  19. max_retries=100,
  20. retries_per_point=30,
  21. max_dist_km=25,
  22. usa_chance=0.1
  23. ),
  24. (GenMethodEnum.urban, True): UrbanPointSource(
  25. stock_target=stock_target,
  26. max_retries=100,
  27. retries_per_point=30,
  28. max_dist_km=25,
  29. usa_chance=1.0
  30. )
  31. }
  32. def generate_points(config: GameConfig) -> List[Tuple[float, float]]:
  33. """
  34. Generate points according to the GameConfig.
  35. """
  36. return sources[(config.generation_method, config.only_america)].get_points(config.rounds)
  37. def restock_source(config: GameConfig):
  38. """
  39. Restock the PointSource associated with the GameConfig
  40. """
  41. sources[(config.generation_method, config.only_america)].restock()
  42. def get_cache_info() -> List[CacheInfo]:
  43. """
  44. Get CacheInfo for each of the PointSources
  45. """
  46. return [CacheInfo(generation_method=gm, only_america=oa, size=len(src.stock)) for ((gm, oa), src) in sources.items()]