aenir 0.0.post1.dev1379__tar.gz → 0.0.post1.dev1385__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/PKG-INFO +1 -1
  2. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/morph.py +28 -24
  3. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/PKG-INFO +1 -1
  4. aenir-0.0.post1.dev1385/src/aenir.egg-info/scm_version.json +8 -0
  5. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/test_morph.py +183 -1016
  6. aenir-0.0.post1.dev1379/src/aenir.egg-info/scm_version.json +0 -8
  7. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/.coveragerc +0 -0
  8. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/.gitignore +0 -0
  9. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/.readthedocs.yml +0 -0
  10. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/AUTHORS.md +0 -0
  11. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/CHANGELOG.md +0 -0
  12. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/CONTRIBUTING.md +0 -0
  13. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/LICENSE.txt +0 -0
  14. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/MANIFEST.in +0 -0
  15. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/README.md +0 -0
  16. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/TODO.md +0 -0
  17. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/Makefile +0 -0
  18. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/_static/.gitignore +0 -0
  19. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/authors.md +0 -0
  20. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/changelog.md +0 -0
  21. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/conf.py +0 -0
  22. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/contributing.md +0 -0
  23. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/index.md +0 -0
  24. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/license.md +0 -0
  25. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/readme.md +0 -0
  26. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/docs/requirements.txt +0 -0
  27. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/logo.png +0 -0
  28. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/pyproject.toml +0 -0
  29. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/requirements-dev.txt +0 -0
  30. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/requirements.txt +0 -0
  31. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/setup.cfg +0 -0
  32. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/setup.py +0 -0
  33. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/.create_table_from_csv.py +0 -0
  34. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/__init__.py +0 -0
  35. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/__init__.py +0 -0
  36. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/_base.py +0 -0
  37. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/_basemorph.py +0 -0
  38. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/cleaner.py +0 -0
  39. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/morph.py +0 -0
  40. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/scraper.py +0 -0
  41. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/shortcuts.py +0 -0
  42. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_archive/transcriber.py +0 -0
  43. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_exceptions.py +0 -0
  44. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/_logging.py +0 -0
  45. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/games.py +0 -0
  46. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/skeleton.py +0 -0
  47. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/binding-blade/cleaned_stats.db +0 -0
  48. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/blazing-sword/cleaned_stats.db +0 -0
  49. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/genealogy-of-the-holy-war/cleaned_stats.db +0 -0
  50. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/path-of-radiance/cleaned_stats.db +0 -0
  51. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/the-sacred-stones/cleaned_stats.db +0 -0
  52. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/static/thracia-776/cleaned_stats.db +0 -0
  53. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir/stats.py +0 -0
  54. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/SOURCES.txt +0 -0
  55. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/dependency_links.txt +0 -0
  56. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/not-zip-safe +0 -0
  57. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/requires.txt +0 -0
  58. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/scm_file_list.json +0 -0
  59. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/src/aenir.egg-info/top_level.txt +0 -0
  60. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/conftest.py +0 -0
  61. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/test_games.py +0 -0
  62. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/test_skeleton.py +0 -0
  63. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/test_stats.py +0 -0
  64. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tests/weapon.py +0 -0
  65. {aenir-0.0.post1.dev1379 → aenir-0.0.post1.dev1385}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aenir
3
- Version: 0.0.post1.dev1379
3
+ Version: 0.0.post1.dev1385
4
4
  Summary: Stat calculator for Fire Emblem
5
5
  Home-page: https://github.com/gchang12/aenir/
6
6
  Author: gchang12
@@ -386,7 +386,7 @@ class Morph(BaseMorph):
386
386
  resultset = self.query_db(**query_kwargs).fetchall()
387
387
  return [result["Promotion"] for result in resultset]
388
388
 
389
- def promote(self, *, promo_cls=None) -> None:
389
+ def promote(self, promo_cls) -> None:
390
390
  """
391
391
  Changes unit class and boosts stats among other parameters, given the right conditions are met.
392
392
  """
@@ -399,8 +399,8 @@ class Morph(BaseMorph):
399
399
  )
400
400
  query_kwargs['fields'] += ("Promotion",)
401
401
  # check if unit's level is high enough to enable promotion
402
- if self.min_promo_level is None:
403
- self._set_min_promo_level()
402
+ #if self.min_promo_level is None:
403
+ self._set_min_promo_level()
404
404
  if self.current_lv < self.min_promo_level:
405
405
  # Wishful: Tell user what morph should promote to
406
406
  #print(query_kwargs)
@@ -414,24 +414,28 @@ class Morph(BaseMorph):
414
414
  # get promotion data
415
415
  resultset = self.query_db(**query_kwargs).fetchall()
416
416
  # if resultset has length > 1, filter to relevant
417
- if len(resultset) > 1:
418
- if promo_cls is not None:
419
- self.promo_cls = promo_cls
420
- new_resultset = list(
421
- filter(
422
- lambda result: result['Promotion'] == self.promo_cls,
423
- resultset,
424
- )
417
+ if promo_cls is not None:
418
+ _promo_cls = promo_cls
419
+ else:
420
+ _promo_cls = self.promo_cls
421
+ new_resultset = list(
422
+ filter(
423
+ lambda result: result['Promotion'] == _promo_cls,
424
+ resultset,
425
425
  )
426
- if not new_resultset:
427
- valid_promotions = tuple(result["Promotion"] for result in resultset)
428
- raise PromotionError(
429
- f"{self.promo_cls} is an invalid promotion. Valid promotions: {valid_promotions}",
430
- reason=PromotionError.Reason.INVALID_PROMOTION,
431
- promotion_list=valid_promotions,
432
- )
426
+ )
427
+ if not new_resultset:
428
+ if self.game_no == 4 or (self.game_no == 5 and self.name != "Lara"):
429
+ valid_promotions = (self.promo_cls,)
433
430
  else:
434
- resultset = new_resultset
431
+ valid_promotions = tuple(result["Promotion"] for result in resultset)
432
+ raise PromotionError(
433
+ f"'{_promo_cls}' is an invalid promotion. Valid promotions: {valid_promotions}",
434
+ reason=PromotionError.Reason.INVALID_PROMOTION,
435
+ promotion_list=valid_promotions,
436
+ )
437
+ else:
438
+ resultset = new_resultset
435
439
  # ** PROMOTION START! **
436
440
  # record history
437
441
  self.history.append((self.current_lv, self.current_cls))
@@ -827,7 +831,7 @@ class Morph4(Morph):
827
831
  promotion_item = "*Promote at Base*"
828
832
  return promotion_item
829
833
 
830
- def promote(self, *, promo_cls=None) -> None:
834
+ def promote(self, promo_cls) -> None:
831
835
  """
832
836
  Promotes unit and resets max level and current level to original.
833
837
  """
@@ -1002,7 +1006,7 @@ class Morph5(Morph):
1002
1006
  min_promo_level = 1
1003
1007
  self.min_promo_level = min_promo_level
1004
1008
 
1005
- def promote(self, *, promo_cls=None) -> None:
1009
+ def promote(self, promo_cls) -> None:
1006
1010
  """
1007
1011
  Provides logic for promotion of Lara and other thieves in addition to usual units.
1008
1012
  """
@@ -1017,7 +1021,7 @@ class Morph5(Morph):
1017
1021
  f"{self.name} has no available promotions.",
1018
1022
  reason=PromotionError.Reason.NO_PROMOTIONS,
1019
1023
  )
1020
- super().promote(promo_cls=promo_cls)
1024
+ super().promote(promo_cls)
1021
1025
  self.current_stats.imax(self.Stats(**self.Stats.get_stat_dict(0)))
1022
1026
  self.min_promo_level = None
1023
1027
 
@@ -1968,11 +1972,11 @@ class Morph8(Morph):
1968
1972
  else:
1969
1973
  self.max_level = 20
1970
1974
 
1971
- def promote(self, *, promo_cls=None) -> None:
1975
+ def promote(self, promo_cls) -> None:
1972
1976
  """
1973
1977
  Promotes, then sets max_level to None so that it may be recalculated.
1974
1978
  """
1975
- super().promote(promo_cls=promo_cls)
1979
+ super().promote(promo_cls)
1976
1980
  self.max_level = None
1977
1981
 
1978
1982
  def use_metiss_tome(self) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aenir
3
- Version: 0.0.post1.dev1379
3
+ Version: 0.0.post1.dev1385
4
4
  Summary: Stat calculator for Fire Emblem
5
5
  Home-page: https://github.com/gchang12/aenir/
6
6
  Author: gchang12
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.0",
3
+ "distance": 1385,
4
+ "node": "g20a180004eebf003041f90b6834250957c079cb7",
5
+ "dirty": false,
6
+ "branch": "main",
7
+ "node_date": "2026-09-23"
8
+ }