panda-pytest-assertions 0.3.0__tar.gz → 0.4.0__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 (181) hide show
  1. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.config/.editorconfig +2 -2
  2. panda_pytest_assertions-0.4.0/.config/.flake8 +25 -0
  3. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.config/mypy.ini +44 -23
  4. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.config/ruff.toml +200 -41
  5. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.github/workflows/pr-checker.yml +5 -5
  6. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.github/workflows/release.yml +9 -8
  7. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/CHANGELOG.md +14 -0
  8. panda_pytest_assertions-0.4.0/NOTICE +1 -0
  9. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/PKG-INFO +3 -3
  10. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/README-DEV.MD +4 -4
  11. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/20.expectations.md +1 -1
  12. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/pyproject.toml +21 -17
  13. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_context/_assert_context.py +3 -3
  14. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/identity.py +2 -0
  15. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/is_type.py +5 -0
  16. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/mapping_subset.py +2 -0
  17. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/object_attibutes.py +2 -0
  18. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/stringified.py +2 -0
  19. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/unordered.py +2 -0
  20. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/with_type.py +8 -0
  21. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/asserter.py +4 -0
  22. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/equality_asserter.py +3 -0
  23. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/identity_asserter.py +3 -0
  24. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/is_type_asserter.py +3 -0
  25. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/mapping_asserter.py +3 -0
  26. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/mapping_subset_asserter.py +3 -0
  27. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/object_attributes_asserter.py +3 -0
  28. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/ordered_elements_asserter.py +4 -1
  29. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/stringified_asserter.py +3 -0
  30. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/unordered_elements_asserter.py +3 -0
  31. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/with_type_asserter.py +3 -0
  32. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_protocols.py +11 -0
  33. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/is_type.py +2 -0
  34. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/mapping.py +3 -0
  35. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/mapping_subset.py +3 -0
  36. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/object_attributes.py +2 -0
  37. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/of_type.py +3 -0
  38. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/uniform_mapping.py +3 -0
  39. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/uniform_mapping_subset.py +3 -0
  40. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/uniform_ordered.py +3 -0
  41. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/uniform_unordered.py +2 -0
  42. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/union.py +2 -0
  43. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/with_type.py +3 -0
  44. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/equality_generator.py +3 -0
  45. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/equality_key_mapping_generator.py +3 -0
  46. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/generator.py +5 -0
  47. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/is_type_generator.py +3 -0
  48. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/mapping_generator.py +3 -0
  49. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/mapping_subset_generator.py +3 -0
  50. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/object_attributes_generator.py +3 -0
  51. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/of_type_generator.py +3 -0
  52. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/ordered_generator.py +3 -0
  53. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/stringified_generator.py +3 -0
  54. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/uniform_mapping_generator.py +3 -0
  55. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/uniform_mapping_subset_generator.py +3 -0
  56. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/uniform_ordered_generator.py +3 -0
  57. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/union_generator.py +4 -1
  58. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/unordered_generator.py +3 -0
  59. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/with_type_generator.py +3 -0
  60. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/test_error_messages.py +8 -4
  61. panda_pytest_assertions-0.4.0/uv.lock +1361 -0
  62. panda_pytest_assertions-0.4.0/version.txt +1 -0
  63. panda_pytest_assertions-0.3.0/.config/.flake8 +0 -13
  64. panda_pytest_assertions-0.3.0/NOTICE +0 -1
  65. panda_pytest_assertions-0.3.0/uv.lock +0 -1075
  66. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.config/.coveragerc +0 -0
  67. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.config/pytest.ini +0 -0
  68. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.coveragerc +0 -0
  69. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.editorconfig +0 -0
  70. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.flake8 +0 -0
  71. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.gitattributes +0 -0
  72. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/.gitignore +0 -0
  73. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/LICENSE +0 -0
  74. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/README.md +0 -0
  75. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_context/index.md +0 -0
  76. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/10.asserting.md +0 -0
  77. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/30.using_yaml.md +0 -0
  78. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/40.asserters.md +0 -0
  79. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/generating_expectation/10.definition.md +0 -0
  80. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/generating_expectation/20.generators.md +0 -0
  81. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/generating_expectation/index.md +0 -0
  82. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/assert_object/index.md +0 -0
  83. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/docs/index.md +0 -0
  84. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/mkdocs.yml +0 -0
  85. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/mypy.ini +0 -0
  86. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/pytest.ini +0 -0
  87. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/ruff.toml +0 -0
  88. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/__init__.py +0 -0
  89. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_context/__init__.py +0 -0
  90. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/__init__.py +0 -0
  91. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_assert_object.py +0 -0
  92. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_asserter_factories/__init__.py +0 -0
  93. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_asserter_factories/asserter_factory.py +0 -0
  94. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_asserter_factories/built_in_asserter_factory.py +0 -0
  95. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_converters/__init__.py +0 -0
  96. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_converters/expectation_from_yaml.py +0 -0
  97. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_converters/expectation_to_yaml.py +0 -0
  98. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_expectation_modificators/__init__.py +0 -0
  99. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/_objects_asserters/__init__.py +0 -0
  100. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/__init__.py +0 -0
  101. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/__init__.py +0 -0
  102. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/equality.py +0 -0
  103. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_expectation_definitions/stringified.py +0 -0
  104. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generate_expectation.py +0 -0
  105. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generator_factories/__init__.py +0 -0
  106. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generator_factories/built_in_generator_factory.py +0 -0
  107. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generator_factories/generator_factory.py +0 -0
  108. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/__init__.py +0 -0
  109. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/assert_object/generators/_generators/exceptions.py +0 -0
  110. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/src/panda_pytest_assertions/py.typed +0 -0
  111. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/__init__.py +0 -0
  112. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/__init__.py +0 -0
  113. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_context/__init__.py +0 -0
  114. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_context/test_assert_context.py +0 -0
  115. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/__init__.py +0 -0
  116. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_asserter_factories/__init__.py +0 -0
  117. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_asserter_factories/test_asserter_factory.py +0 -0
  118. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_asserter_factories/test_built_in_asserter_factory.py +0 -0
  119. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_converters/__init__.py +0 -0
  120. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_converters/conftest.py +0 -0
  121. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_converters/test_expectation_from_yaml.py +0 -0
  122. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_converters/test_expectation_to_yaml.py +0 -0
  123. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/__init__.py +0 -0
  124. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_is.py +0 -0
  125. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_is_type.py +0 -0
  126. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_mapping_subset.py +0 -0
  127. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_object_attibutes.py +0 -0
  128. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_stringified.py +0 -0
  129. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_unordered.py +0 -0
  130. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_expectation_modificators/test_with_type.py +0 -0
  131. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/__init__.py +0 -0
  132. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/__init__.py +0 -0
  133. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_equality.py +0 -0
  134. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_is_type.py +0 -0
  135. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_mapping.py +0 -0
  136. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_mapping_subset.py +0 -0
  137. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_object_attributes.py +0 -0
  138. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_of_type.py +0 -0
  139. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_stringified.py +0 -0
  140. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_uniform_mapping.py +0 -0
  141. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_uniform_mapping_subset.py +0 -0
  142. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_uniform_ordered.py +0 -0
  143. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_uniform_unordered.py +0 -0
  144. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_union.py +0 -0
  145. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_expectation_definitions/test_with_type.py +0 -0
  146. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generator_factories/__init__.py +0 -0
  147. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generator_factories/test_built_in_generator_factory.py +0 -0
  148. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generator_factories/test_generator_factory.py +0 -0
  149. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/__init__.py +0 -0
  150. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/conftest.py +0 -0
  151. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_equality_generator.py +0 -0
  152. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_equality_key_mapping_generator.py +0 -0
  153. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_is_type_generator.py +0 -0
  154. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_mapping_generator.py +0 -0
  155. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_mapping_subset_generator.py +0 -0
  156. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_object_attributes_generator.py +0 -0
  157. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_of_type_generator.py +0 -0
  158. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_ordered_generator.py +0 -0
  159. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_stringified_generator.py +0 -0
  160. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_uniform_mapping_generator.py +0 -0
  161. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_uniform_mapping_subset_generator.py +0 -0
  162. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_uniform_ordered_generator.py +0 -0
  163. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_union_generator.py +0 -0
  164. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_unordered_generator.py +0 -0
  165. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/_generators/test_with_type_generator.py +0 -0
  166. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/test_complex.py +0 -0
  167. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_generators/test_generate_expectation.py +0 -0
  168. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/__init__.py +0 -0
  169. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/conftest.py +0 -0
  170. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_equality_asserter.py +0 -0
  171. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_identity_asserter.py +0 -0
  172. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_is_type_asserter.py +0 -0
  173. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_mapping_asserter.py +0 -0
  174. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_mapping_subset_asserter.py +0 -0
  175. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_object_attributes_asserter.py +0 -0
  176. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_ordered_elements_asserter.py +0 -0
  177. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_stringified_asserter.py +0 -0
  178. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_unordered_elements_asserter.py +0 -0
  179. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/_objects_asserters/test_with_type_asserter.py +0 -0
  180. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/test_assert_object.py +0 -0
  181. {panda_pytest_assertions-0.3.0 → panda_pytest_assertions-0.4.0}/tests/panda_pytest_assertions/assert_object/test_complex.py +0 -0
@@ -9,9 +9,9 @@ end_of_line = lf
9
9
  indent_style = space
10
10
  indent_size = 4
11
11
 
12
- [*.{json,yaml,yml}]
12
+ [*.{json,yaml,yml,xml}]
13
13
  indent_size = 2
14
14
 
15
- [*.{md}]
15
+ [*.md]
16
16
  indent_size = 4
17
17
  trim_trailing_whitespace = false
@@ -0,0 +1,25 @@
1
+ [flake8]
2
+ count = True
3
+ extend-exclude =
4
+ .*/
5
+ tests/*
6
+
7
+ ### Rules choice
8
+ # DOC: We use flake8 just to run pydoclint, ruff takes care about the rest
9
+ select=DOC
10
+ # DOC5xx: Violations about “raise” and “assert” statements
11
+ # DOC6xx: Violations about class attributes
12
+ # DOC203: Return type(s) in the docstring not consistent with the return annotation
13
+ # DOC404: The types in the docstring’s Yields section and the return annotation in the signature are not consistent
14
+ ignore=DOC5,DOC6,DOC203,DOC404
15
+
16
+ ### pydoclint options
17
+ style = sphinx
18
+ arg-type-hints-in-docstring = False
19
+ skip-checking-short-docstrings = False
20
+ skip-checking-raises = True
21
+ check-return-types = False
22
+ check-yield-types = False
23
+ check-class-attributes = False
24
+ check-style-mismatch = True
25
+ omit-stars-when-documenting-varargs = True
@@ -1,4 +1,4 @@
1
- ### Configuration created for mypy==1.18.2
1
+ ### Configuration created for mypy==2.4.0
2
2
 
3
3
  [mypy]
4
4
 
@@ -125,7 +125,7 @@ no_silence_site_packages = False
125
125
  ### Platform configuration
126
126
  # Specifies the Python version used to parse and check the target
127
127
  # program. The string should be in the format MAJOR.MINOR –
128
- # for example 3.9. The default is the version of the Python
128
+ # for example 3.10. The default is the version of the Python
129
129
  # interpreter used to run mypy.
130
130
  # This option may only be set in the global section ([mypy]).
131
131
  #python_version =
@@ -255,26 +255,33 @@ ignore_errors = False
255
255
  allow_untyped_globals = False
256
256
 
257
257
  # By default, mypy won’t allow a variable to be redefined with an
258
- # unrelated type. This experimental flag enables the redefinition of
259
- # unannotated variables with an arbitrary type. You will also need to enable
260
- # local_partial_types.
261
- # Example:
258
+ # unrelated type. This flag enables the redefinition of unannotated
259
+ # variables with an arbitrary type. This also requires
260
+ # local_partial_types, which is enabled by default starting
261
+ # from mypy 2.0. Example:
262
262
  # This also enables an unannotated variable to have different types in different
263
263
  # code locations:
264
+ # Function arguments are special, changing their type within function body
265
+ # is allowed even if they are annotated, but that annotation is used to infer
266
+ # types of r.h.s. of all subsequent assignments. Such middle-ground semantics
267
+ # provides good balance for majority of common use cases. For example:
264
268
  # Note: We are planning to turn this flag on by default in a future mypy
265
- # release, along with local_partial_types.
269
+ # release.
270
+ allow_redefinition = False
271
+
272
+ # Deprecated alias for allow_redefinition.
266
273
  allow_redefinition_new = False
267
274
 
268
275
  # Allows variables to be redefined with an arbitrary type, as long as the redefinition
269
276
  # is in the same block and nesting level as the original definition.
270
277
  # Example where this can be useful:
271
278
  # The variable must be used before it can be redefined:
272
- allow_redefinition = False
279
+ allow_redefinition_old = False
273
280
 
274
- # Disallows inferring variable type for None from two assignments in different scopes.
275
- # This is always implicitly enabled when using the mypy daemon.
276
- # This will be enabled by default in a future mypy release.
277
- local_partial_types = False
281
+ # This prevents inferring a variable type from an empty container (such as a list or
282
+ # a dictionary) created at module top level or class body and updated in
283
+ # a function. This must be enabled when using the mypy daemon.
284
+ local_partial_types = True
278
285
 
279
286
  # Allows disabling one or multiple error codes globally.
280
287
  #disable_error_code =
@@ -301,16 +308,16 @@ strict_equality = True
301
308
  # to be activated).
302
309
  strict_equality_for_none = False
303
310
 
304
- # Disable treating bytearray and memoryview as subtypes of bytes.
305
- # This will be enabled by default in mypy 2.0.
306
- strict_bytes = False
311
+ # If disabled, mypy treats bytearray and memoryview as subtypes of bytes.
312
+ # This has been enabled by default since mypy 2.0.
313
+ strict_bytes = True
307
314
 
308
315
  # Enable all optional error checking flags. You can see the list of
309
316
  # flags enabled by strict mode in the full mypy --help
310
317
  # output.
311
318
  # Note: the exact list of flags enabled by strict may
312
319
  # change over time.
313
- strict = True
320
+ strict = False
314
321
 
315
322
 
316
323
  ### Configuring error messages
@@ -339,11 +346,6 @@ error_summary = True
339
346
  # Show absolute paths to files.
340
347
  show_absolute_path = False
341
348
 
342
- # Always use Union[] and Optional[] for union types
343
- # in error messages (instead of the | operator),
344
- # even on Python 3.10+.
345
- force_union_syntax = False
346
-
347
349
 
348
350
  ### Incremental mode
349
351
  # Enables incremental mode.
@@ -359,7 +361,7 @@ incremental = True
359
361
  cache_dir = .mypy_cache
360
362
 
361
363
  # Use an SQLite database to store the cache.
362
- sqlite_cache = False
364
+ sqlite_cache = True
363
365
 
364
366
  # Include fine-grained dependency information in the cache for the mypy daemon.
365
367
  cache_fine_grained = False
@@ -373,6 +375,15 @@ skip_version_check = False
373
375
  skip_cache_mtime_checks = False
374
376
 
375
377
 
378
+ ### Parallel type-checking configuration
379
+ # Use a specific number of parallel worker processes for type-checking or
380
+ # the value auto to select the number based on the CPUs available to mypy.
381
+ # See parallel type-checking for more details.
382
+ # The MYPY_NUM_WORKERS environment variable accepts the same values and
383
+ # overrides this setting.
384
+ num_workers = 0
385
+
386
+
376
387
  ### Advanced options
377
388
  # A comma-separated list of mypy plugins. See Extending mypy using plugins.
378
389
  #plugins =
@@ -403,6 +414,12 @@ raise_exceptions = False
403
414
  # in combination with disallow_untyped_defs or disallow_incomplete_defs.
404
415
  warn_incomplete_stub = True
405
416
 
417
+ # Use the fast Rust-based native parser that parses directly to mypy AST.
418
+ # Set this to False to use the legacy parser based on the stdlib
419
+ # ast module instead. See --no-native-parser
420
+ # for more details.
421
+ native_parser = True
422
+
406
423
 
407
424
  ### Report generation
408
425
  # Causes mypy to generate a text file report documenting how many
@@ -453,13 +470,17 @@ warn_incomplete_stub = True
453
470
  # with continuous integration (CI) tools.
454
471
  #junit_xml =
455
472
 
473
+ # If junit_xml is set, specifies format.
474
+ # global (default): single test with all errors;
475
+ # per_file: one test entry per file with failures.
476
+ junit_format = global
477
+
456
478
  # Makes script x become module x instead of __main__. This is
457
479
  # useful when checking multiple scripts in a single run.
458
480
  scripts_are_modules = False
459
481
 
460
482
  # Warns about per-module sections in the config file that do not
461
483
  # match any files processed when invoking mypy.
462
- # (This requires turning off incremental mode using incremental = False.)
463
484
  warn_unused_configs = True
464
485
 
465
486
  # Controls how much debug output will be generated. Higher numbers are more verbose.
@@ -1,4 +1,4 @@
1
- ### Configuration created for ruff==0.14.0
1
+ ### Configuration created for ruff==0.17.0
2
2
 
3
3
  # A list of builtins to treat as defined references, in addition to the
4
4
  # system builtins.
@@ -45,12 +45,19 @@ exclude = [
45
45
  "node_modules",
46
46
  "venv",
47
47
  ]
48
- # A path to a local pyproject.toml file to merge into this
48
+ # A path to a local pyproject.toml or ruff.toml file to merge into this
49
49
  # configuration. User home directory and environment variables will be
50
50
  # expanded.
51
- # To resolve the current pyproject.toml file, Ruff will first resolve
52
- # this base configuration file, then merge in any properties defined
53
- # in the current configuration file.
51
+ # To resolve the current configuration file, Ruff will first load
52
+ # this base configuration file, then merge in properties defined
53
+ # in the current configuration file. Most settings follow simple override
54
+ # behavior where the child value replaces the parent value. However,
55
+ # rule selection (lint.select and lint.ignore) has special merging
56
+ # behavior: if the child configuration specifies lint.select, it
57
+ # establishes a new baseline rule set and the parent's lint.ignore
58
+ # rules are discarded; if the child configuration omits lint.select,
59
+ # the parent's rule selection is inherited and both parent and child
60
+ # lint.ignore rules are accumulated together.
54
61
  #extend =
55
62
  # A list of file patterns to omit from formatting and linting, in addition to those
56
63
  # specified by exclude.
@@ -70,6 +77,13 @@ extend-exclude = []
70
77
  # *.pyw, to include any file with the .pyw extension.
71
78
  # For more information on the glob syntax, refer to the globset documentation.
72
79
  extend-include = []
80
+ # A mapping of custom file extensions to known file types (overridden
81
+ # by the --extension command-line flag).
82
+ # Supported file types include python, pyi, ipynb, and markdown.
83
+ # Any file extensions listed here will be automatically added to the
84
+ # default include list as a *.{ext} glob, so that they are linted
85
+ # and formatted without needing any additional configuration settings.
86
+ extension = {}
73
87
  # Enable fix behavior by-default when running ruff (overridden
74
88
  # by the --fix and --no-fix command-line flags).
75
89
  # Only includes automatic fixes unless --unsafe-fixes is provided.
@@ -88,9 +102,10 @@ fix-only = false
88
102
  force-exclude = false
89
103
  # A list of file patterns to include when linting.
90
104
  # Inclusion are based on globs, and should be single-path patterns, like
91
- # *.pyw, to include any file with the .pyw extension. pyproject.toml is
92
- # included here not for configuration but because we lint whether e.g. the
93
- # [project] matches the schema.
105
+ # *.pyw, to include any file with the .pyw extension.
106
+ # pyproject.toml, ruff.toml, and .ruff.toml are included here not for
107
+ # configuration but because we lint whether e.g. the [project] matches
108
+ # the schema in pyproject.toml or that rule names are used as selectors.
94
109
  # Notebook files (.ipynb extension) are included by default on Ruff 0.6.0+.
95
110
  # For more information on the glob syntax, refer to the globset documentation.
96
111
  include = [
@@ -98,7 +113,10 @@ include = [
98
113
  "*.pyi",
99
114
  "*.pyw",
100
115
  "*.ipynb",
116
+ "*.md",
101
117
  "**/pyproject.toml",
118
+ "**/ruff.toml",
119
+ "**/.ruff.toml",
102
120
  ]
103
121
  # The number of spaces per indentation level (tab).
104
122
  # Used by the formatter and when enforcing long-line violations (like E501) to determine the visual
@@ -111,7 +129,7 @@ indent-width = 4
111
129
  # and at which isort and the formatter prefers to wrap lines.
112
130
  # The length is determined by the number of characters per line, except for lines containing East Asian characters or emojis.
113
131
  # For these lines, the unicode width of each character is added up to determine the length.
114
- # The value must be greater than 0 and less than or equal to 320.
132
+ # The value must be greater than 0.
115
133
  # Note: While the formatter will attempt to format lines such that they remain
116
134
  # within the line-length, it isn't a hard upper bound, and formatted lines may
117
135
  # exceed the line-length.
@@ -127,6 +145,19 @@ namespace-packages = []
127
145
  # Actions annotations), "gitlab" (GitLab CI code quality report),
128
146
  # "pylint" (Pylint text format) or "azure" (Azure Pipeline logging commands).
129
147
  output-format = "concise"
148
+ # Whether to prefer rule codes over human-readable rule names in diagnostic output, even
149
+ # when preview mode is enabled.
150
+ # Diagnostics without rule codes, such as syntax errors and formatting diagnostics, will
151
+ # continue to use the human-readable name, but those corresponding to lint rules will use the
152
+ # rule's code. For example, the concise diagnostic for an unused import will use the code
153
+ # F401 instead of the name unused-import:
154
+ # ---
155
+ # $ ruff check --preview --config 'output-prefer-rule-codes = true' --output-format=concise example.py
156
+ # example.py:1:8: F401 [*] `math` imported but unused
157
+ # $ ruff check --preview --config 'output-prefer-rule-codes = false' --output-format=concise example.py
158
+ # example.py:1:8: unused-import: [*] `math` imported but unused
159
+ # ---
160
+ output-prefer-rule-codes = false
130
161
  # A list of mappings from glob-style file pattern to Python version to use when checking the
131
162
  # corresponding file(s).
132
163
  # This may be useful for overriding the global Python version settings in target-version or
@@ -185,8 +216,8 @@ src = [
185
216
  # The minimum Python version to target, e.g., when considering automatic
186
217
  # code upgrades, like rewriting type annotations. Ruff will not propose
187
218
  # changes using features that are not available in the given version.
188
- # For example, to represent supporting Python >=3.11 or ==3.11
189
- # specify target-version = "py311".
219
+ # For example, to represent supporting Python >=3.12 or ==3.12
220
+ # specify target-version = "py312".
190
221
  # If you're already using a pyproject.toml file, we recommend
191
222
  # project.requires-python instead, as it's based on Python packaging
192
223
  # standards, and will be respected by other tools. For example, Ruff
@@ -208,7 +239,7 @@ src = [
208
239
  # 3.10+. As such, Ruff will often recommend newer features in a stub
209
240
  # file than it would for an equivalent runtime file with the same target
210
241
  # version.
211
- target-version = "py310"
242
+ target-version = "py311"
212
243
  # Enable application of unsafe fixes.
213
244
  # If excluded, a hint will be displayed when unsafe fixes are available.
214
245
  # If set to false, the hint will be hidden.
@@ -244,6 +275,10 @@ preview = false
244
275
  # For example, if this is set to 2, then only strings with at least two dots (e.g., "path.to.module")
245
276
  # would be considered valid imports.
246
277
  string-imports-min-dots = 2
278
+ # Whether to include imports that are only used for type checking (i.e., imports within if TYPE_CHECKING: blocks).
279
+ # When enabled (default), type-checking-only imports are included in the import graph.
280
+ # When disabled, they are excluded.
281
+ type-checking-imports = true
247
282
 
248
283
  [format]
249
284
  # Whether to format code snippets in docstrings.
@@ -396,8 +431,17 @@ indent-style = "space"
396
431
  # - cr-lf: Line endings will be converted to \r\n. The default line ending on Windows.
397
432
  # - native: Line endings will be converted to \n on Unix and \r\n on Windows.
398
433
  line-ending = "lf"
434
+ # Controls the quote style for nested strings inside interpolated string expressions.
435
+ # - alternating (default): Use alternating quotes.
436
+ # - preferred: Use the configured quote-style.
437
+ # ---
438
+ # f"{data['key']}" # alternating (default)
439
+ # f"{data["key"]}" # preferred
440
+ # ---
441
+ # Note: This setting has no effect when targeting Python versions below 3.12.
442
+ nested-string-quote-style = "alternating"
399
443
  # Whether to enable the unstable preview style formatting.
400
- preview = false
444
+ preview = true
401
445
  # Configures the preferred quote character for strings. The recommended options are
402
446
  # - double (default): Use double quotes "
403
447
  # - single: Use single quotes '
@@ -441,8 +485,9 @@ skip-magic-trailing-comma = false
441
485
  allowed-confusables = []
442
486
  # A regular expression used to identify "dummy" variables, or those which
443
487
  # should be ignored when enforcing (e.g.) unused-variable rules. The
444
- # default expression matches _, __, and _var, but not _var_.
445
- dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
488
+ # default expression matches _, __, _var, and _次, but not _var_
489
+ # or _次_.
490
+ dummy-variable-rgx = "^(_+|(_+[\\p{XID_Continue}]*[\\p{XID_Continue}--_]+?))$"
446
491
  # A list of file patterns to exclude from linting in addition to the files excluded globally (see exclude, and extend-exclude).
447
492
  # Exclusions are based on globs, and can be either:
448
493
  # - Single-path patterns, like .mypy_cache (to exclude any directory
@@ -469,6 +514,19 @@ extend-per-file-ignores = {}
469
514
  extend-safe-fixes = []
470
515
  # A list of rule codes or prefixes to enable, in addition to those
471
516
  # specified by select.
517
+ # Unlike select, which replaces the default rule set
518
+ # when specified, extend-select adds to whatever rules are already
519
+ # active. This makes extend-select the preferred option when you want
520
+ # to enable additional rules on top of the defaults without having to
521
+ # enumerate them.
522
+ # For example, to enable the defaults plus flake8-bugbear:
523
+ # ---
524
+ # [tool.ruff.lint]
525
+ # # Adds flake8-bugbear on top of the default rules.
526
+ # extend-select = ["B"]
527
+ # ---
528
+ # Using select = ["B"] instead would replace the defaults, enabling
529
+ # only flake8-bugbear.
472
530
  extend-select = []
473
531
  # A list of rule codes or prefixes for which safe fixes should be considered
474
532
  # unsafe.
@@ -477,9 +535,7 @@ extend-unsafe-fixes = []
477
535
  # preserved when (e.g.) validating # noqa directives. Useful for
478
536
  # retaining # noqa directives that cover plugins not yet implemented
479
537
  # by Ruff.
480
- external = [
481
- "DAR",
482
- ]
538
+ external = []
483
539
  # A list of rule codes or prefixes to consider fixable. By default,
484
540
  # all rules are considered fixable.
485
541
  fixable = [
@@ -491,14 +547,16 @@ fixable = [
491
547
  # if __future__ annotations are enabled.
492
548
  future-annotations = false
493
549
  # A list of rule codes or prefixes to ignore. Prefixes can specify exact
494
- # rules (like F841), entire categories (like F), or anything in
550
+ # rules (like F841), entire groups (like F), or anything in
495
551
  # between.
496
552
  # When breaking ties between enabled and disabled rules (via select and
497
553
  # ignore, respectively), more specific prefixes override less
498
554
  # specific prefixes. ignore takes precedence over select if the same
499
555
  # prefix appears in both.
556
+ # In preview, categories like correctness and suspicious can be used
557
+ # in addition to rule codes and linter group prefixes.
500
558
  ignore = [
501
- "B005", # Using .strip() with multi-character strings is misleading
559
+ "B005", # Using `.{strip}()` with multi-character strings is misleading
502
560
  "D100", # Missing docstring in public module
503
561
  "D104", # Missing docstring in public package
504
562
  "D105", # Missing docstring in magic method
@@ -506,12 +564,13 @@ ignore = [
506
564
  "D200", # One-line docstring should fit on one line
507
565
  "D203", # 1 blank line required before class docstring
508
566
  "D212", # Multi-line docstring summary should start at the first line
509
- "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
567
+ "RUF012", # Mutable default value for class attribute
510
568
  "S101", # Use of `assert` detected
511
- "TC001", # Move application import into a type-checking block
512
- "TC002", # Move third-party import into a type-checking block
513
- "TC003", # Move standard library import into a type-checking block
514
- "PYI041", # Use `float` instead of `int | float`
569
+ "TC001", # Move application import `{}` into a type-checking block
570
+ "TC002", # Move third-party import `{}` into a type-checking block
571
+ "TC003", # Move standard library import `{}` into a type-checking block
572
+ "PYI041", # Use `{supertype}` instead of `{subtype} | {supertype}`
573
+ "CPY001", # Missing copyright notice at top of file
515
574
  ]
516
575
  # A list of objects that should be treated equivalently to a
517
576
  # logging.Logger object.
@@ -531,12 +590,14 @@ logger-objects = []
531
590
  # use unstable rules and fixes.
532
591
  preview = false
533
592
  # A list of rule codes or prefixes to enable. Prefixes can specify exact
534
- # rules (like F841), entire categories (like F), or anything in
593
+ # rules (like F841), entire groups (like F), or anything in
535
594
  # between.
536
595
  # When breaking ties between enabled and disabled rules (via select and
537
596
  # ignore, respectively), more specific prefixes override less
538
597
  # specific prefixes. ignore takes precedence over select if the
539
598
  # same prefix appears in both.
599
+ # In preview, categories like correctness and suspicious can be used
600
+ # in addition to rule codes and linter group prefixes.
540
601
  select = [
541
602
  "ALL",
542
603
  ]
@@ -569,14 +630,16 @@ unfixable = []
569
630
  # A list of mappings from file pattern to rule codes or prefixes to
570
631
  # exclude, when considering any matching files. An initial '!' negates
571
632
  # the file pattern.
633
+ # For more information on the glob syntax, refer to the globset documentation.
572
634
  [lint.per-file-ignores]
573
635
  "!tests/*" = [
574
636
  "PT", # flake8-pytest-style
575
637
  ]
576
638
  "tests/*" = [
577
- "SLF001", # Private member accessed
639
+ "SLF001", # Private member accessed: `{access}`
578
640
  "FBT001", # Boolean-typed positional argument in function definition
579
- "PLR0913", # Too many arguments to function call
641
+ "PLR0913", # Too many arguments in function definition ({c_args} > {max_args})
642
+ "PLR0917", # Too many positional arguments ({c_pos} > {max_pos})
580
643
  "RUF018", # Avoid assignment expressions in `assert` statements
581
644
  ]
582
645
  "tests/**/test_*" = [
@@ -584,8 +647,8 @@ unfixable = []
584
647
  "D101", # Missing docstring in public class
585
648
  "D102", # Missing docstring in public method
586
649
  "D103", # Missing docstring in public function
587
- "B011", # [*] Do not `assert False` (`python -O` removes these calls), raise `AssertionError()`
588
- "PLR2004", # Magic value used in comparison
650
+ "B011", # Do not `assert False` (`python -O` removes these calls), raise `AssertionError()`
651
+ "PLR2004", # Magic value used in comparison, consider replacing `{value}` with a constant variable
589
652
  ]
590
653
 
591
654
  [lint.flake8-annotations]
@@ -734,13 +797,15 @@ banned-from = [
734
797
  "tomllib",
735
798
  ]
736
799
  # A mapping from module to conventional import alias. These aliases will
737
- # be added to the aliases mapping.
800
+ # be added to the aliases mapping
801
+ # and will override any existing aliases if the two settings overlap.
738
802
  extend-aliases = {}
739
803
 
740
804
  # The conventional aliases for imports. These aliases can be extended by
741
805
  # the extend-aliases option.
742
806
  [lint.flake8-import-conventions.aliases]
743
807
  "altair" = "alt"
808
+ "datetime" = "dt"
744
809
  "matplotlib" = "mpl"
745
810
  "matplotlib.pyplot" = "plt"
746
811
  "numpy" = "np"
@@ -870,10 +935,16 @@ ignore-names = [
870
935
  ]
871
936
 
872
937
  [lint.flake8-tidy-imports]
938
+ # Specific modules that may not be imported lazily, or "all" to forbid lazy imports except
939
+ # for any modules excluded from the selector. This rule is only enforced when targeting
940
+ # Python 3.15 or newer.
941
+ ban-lazy = []
873
942
  # Whether to ban all relative imports ("all"), or only those imports
874
943
  # that extend into the parent module or beyond ("parents").
875
944
  ban-relative-imports = "parents"
876
945
  # Specific modules or module members that may not be imported or accessed.
946
+ # These can be extended by the
947
+ # extend-banned-api option.
877
948
  # Note that this rule is only meant to flag accidental uses,
878
949
  # and can be circumvented via eval or importlib.
879
950
  banned-api = {}
@@ -882,6 +953,17 @@ banned-api = {}
882
953
  # block, or some other nested context). This also affects the rule import-outside-top-level
883
954
  # if banned-module-level-imports is enabled.
884
955
  banned-module-level-imports = []
956
+ # Additional modules or module members that may not be imported or accessed.
957
+ # These entries will be added to the
958
+ # banned-api mapping and will override
959
+ # any existing entries if the two settings overlap.
960
+ extend-banned-api = {}
961
+ # Specific modules that must be imported lazily in contexts where lazy import is legal, or
962
+ # "all" to require every lazily-convertible import to use the lazy keyword. Ruff ignores
963
+ # contexts where lazy import is invalid, such as functions, classes, try/except
964
+ # blocks, __future__ imports, and from ... import * statements. This rule is only
965
+ # enforced when targeting Python 3.15 or newer.
966
+ require-lazy = []
885
967
 
886
968
  [lint.flake8-type-checking]
887
969
  # Exempt certain modules from needing to be moved into type-checking
@@ -921,18 +1003,39 @@ exempt-modules = [
921
1003
  # ---
922
1004
  # Note that this setting has no effect when from __future__ import annotations
923
1005
  # is present, as __future__ annotations are always treated equivalently
924
- # to quoted annotations.
1006
+ # to quoted annotations. Similarly, this setting has no effect on Python
1007
+ # versions after 3.14 because these annotations are also deferred.
925
1008
  quote-annotations = false
926
1009
  # Exempt classes that list any of the enumerated classes as a base class
927
1010
  # from needing to be moved into type-checking blocks.
928
- # Common examples include Pydantic's pydantic.BaseModel and SQLAlchemy's
929
- # sqlalchemy.orm.DeclarativeBase, but can also support user-defined
930
- # classes that inherit from those base classes. For example, if you define
931
- # a common DeclarativeBase subclass that's used throughout your project
932
- # (e.g., class Base(DeclarativeBase) ... in base.py), you can add it to
933
- # this list (runtime-evaluated-base-classes = ["base.Base"]) to exempt
1011
+ # This can either be configured as a list, if all entries share the same
1012
+ # runtime semantics of being runtime required. Or a table where each entry
1013
+ # is assigned to its desired runtime semantics.
1014
+ # A common example for "runtime" required semantics is Pydantic's pydantic.BaseModel
1015
+ # but can also support user-defined classes that inherit from those base classes.
1016
+ # For example, if you define a common BaseModel subclass that's used throughout
1017
+ # your project (e.g., class Base(BaseModel) ... in base.py), you can add it to
1018
+ # this list/table (runtime-evaluated-base-classes = ["base.Base"]) to exempt
934
1019
  # models from being moved into type-checking blocks.
935
- runtime-evaluated-base-classes = []
1020
+ # ---
1021
+ # [tool.ruff.lint.flake8-type-checking]
1022
+ # runtime-evaluated-base-classes = ["pydantic.BaseModel"]
1023
+ # ---
1024
+ # Or
1025
+ # ---
1026
+ # [tool.ruff.lint.flake8-type-checking.runtime-evaluated-base-classes]
1027
+ # "pydantic.BaseModel" = "required"
1028
+ # ---
1029
+ # For some use-cases like SQLAlchemy's sqlalchemy.orm.DeclarativeBase it makes more
1030
+ # sense to mark the class as runtime "ambiguous", since references to other models do
1031
+ # not need to resolve at runtime. With these semantics ruff will assume the annotations
1032
+ # already contain all of the correct forward references, and will not attempt to move
1033
+ # related imports and/or quote annotations.
1034
+ # ---
1035
+ # [tool.ruff.lint.flake8-type-checking.runtime-evaluated-base-classes]
1036
+ # "sqlalchemy.orm.DeclarativeBase" = "ambiguous"
1037
+ # ---
1038
+ runtime-evaluated-base-classes = {}
936
1039
  # Exempt classes and functions decorated with any of the enumerated
937
1040
  # decorators from being moved into type-checking blocks.
938
1041
  # Common examples include Pydantic's @pydantic.validate_call decorator
@@ -940,14 +1043,16 @@ runtime-evaluated-base-classes = []
940
1043
  # This also supports framework decorators like FastAPI's fastapi.FastAPI.get
941
1044
  # which will work across assignments in the same module.
942
1045
  # For example:
943
- # import fastapi
1046
+ # from fastapi import FastAPI
944
1047
  #
945
1048
  # app = FastAPI("app")
946
1049
  #
947
1050
  # @app.get("/home")
948
1051
  # def home() -> str: ...
949
1052
  # Here app.get will correctly be identified as fastapi.FastAPI.get.
950
- runtime-evaluated-decorators = []
1053
+ # Just like with runtime-evaluated-base-classes it's possible to mark
1054
+ # decorators as runtime "ambiguous".
1055
+ runtime-evaluated-decorators = {}
951
1056
  # Enforce TC001, TC002, and TC003 rules even when valid runtime imports
952
1057
  # are present for the same module.
953
1058
  # See flake8-type-checking's strict option.
@@ -1025,6 +1130,12 @@ forced-separate = []
1025
1130
  # import os
1026
1131
  # import sys
1027
1132
  from-first = false
1133
+ # A mapping from import section names to their heading comments.
1134
+ # When set, a comment with the specified text will be added above imports
1135
+ # in the corresponding section. If a heading comment already exists, it
1136
+ # will be replaced.
1137
+ # Compatible with isort's import_heading_{section_name} settings.
1138
+ import-heading = {}
1028
1139
  # A list of modules to consider first-party, regardless of whether they
1029
1140
  # can be identified as such via introspection of the local filesystem.
1030
1141
  # Supports glob patterns. For more information on the glob syntax, refer
@@ -1243,6 +1354,49 @@ ignore-one-line-docstrings = false
1243
1354
  # [tool.ruff.lint.pydocstyle]
1244
1355
  # convention = "google"
1245
1356
  # ---
1357
+ # The PEP 257 convention includes all D errors apart from:
1358
+ # D203,
1359
+ # D212,
1360
+ # D213,
1361
+ # D214,
1362
+ # D215,
1363
+ # D404,
1364
+ # D405,
1365
+ # D406,
1366
+ # D407,
1367
+ # D408,
1368
+ # D409,
1369
+ # D410,
1370
+ # D411,
1371
+ # D413,
1372
+ # D415,
1373
+ # D416,
1374
+ # D417, and
1375
+ # D420.
1376
+ # The NumPy convention includes all D errors apart from:
1377
+ # D107,
1378
+ # D203,
1379
+ # D212,
1380
+ # D213,
1381
+ # D402,
1382
+ # D413,
1383
+ # D415,
1384
+ # D416, and
1385
+ # D417.
1386
+ # The Google convention includes all D errors apart from:
1387
+ # D203,
1388
+ # D204,
1389
+ # D213,
1390
+ # D215,
1391
+ # D400,
1392
+ # D401,
1393
+ # D404,
1394
+ # D406,
1395
+ # D407,
1396
+ # D408,
1397
+ # D409, and
1398
+ # D413.
1399
+ # For more information see the FAQ entry.
1246
1400
  # To enable an additional rule that's excluded from the convention,
1247
1401
  # select the desired rule via its fully qualified rule code (e.g.,
1248
1402
  # D400 instead of D4 or D40):
@@ -1315,6 +1469,8 @@ max-public-methods = 20
1315
1469
  max-returns = 6
1316
1470
  # Maximum number of statements allowed for a function or method body (see PLR0915).
1317
1471
  max-statements = 50
1472
+ # Maximum number of statements allowed for a try clause body (see W0717).
1473
+ max-statements-in-try = 5
1318
1474
 
1319
1475
  [lint.pyupgrade]
1320
1476
  # Whether to avoid PEP 585 (List[int] -> list[int]) and PEP 604
@@ -1348,3 +1504,6 @@ keep-runtime-typing = false
1348
1504
  # Whether to prefer accessing items keyed by tuples with
1349
1505
  # parentheses around the tuple (see RUF031).
1350
1506
  parenthesize-tuple-in-subscript = false
1507
+ # Whether to require __init__.py files to contain no code at all, including imports and
1508
+ # __all__ assignments (see RUF067). Module and attribute docstrings are still allowed.
1509
+ strictly-empty-init-modules = false
@@ -8,22 +8,22 @@ jobs:
8
8
  strategy:
9
9
  fail-fast: false
10
10
  matrix:
11
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
12
- uv-version: ["0.9.2"]
11
+ python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]
12
+ uv-version: ["0.13.0"]
13
13
  os: ["ubuntu-latest"]
14
14
  runs-on: ${{ matrix.os }}
15
15
  steps:
16
16
 
17
17
  - name: Checkout repo
18
- uses: actions/checkout@v5
18
+ uses: actions/checkout@v7
19
19
 
20
20
  - name: Install uv
21
- uses: astral-sh/setup-uv@v7
21
+ uses: astral-sh/setup-uv@v10.2.0
22
22
  with:
23
23
  version: ${{ matrix.uv-version }}
24
24
 
25
25
  - name: Set up Python ${{ matrix.python-version }}
26
- uses: actions/setup-python@v6
26
+ uses: actions/setup-python@v7
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
29