{"library":"mr-proper","title":"mr-proper","description":"Mr-proper is a static Python code analyzer that aims to identify whether functions are 'pure' or not, and to explain the reasons behind its conclusions. It's a highly experimental library with known edge cases, and its definition of purity is specific to its implementation. The latest version is 0.0.7, released in October 2021, indicating an irregular release cadence.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install mr-proper"],"cli":{"name":"mr-proper","version":"sh: 1: mr-proper: not found"}},"imports":["from mr_propper.utils import is_function_pure"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import ast\nfrom mr_propper.utils import is_function_pure\n\n# Example of a pure function\nfunc_def_pure = ast.parse('''\ndef add_one(n: int) -> int:\n    return n + 1\n''').body[0]\n\nis_pure, errors = is_function_pure(func_def_pure, with_errors=True)\nprint(f\"'add_one' is pure: {is_pure}, Errors: {errors}\")\n\n# Example of a non-pure function\nfunc_def_not_pure = ast.parse('''\ndef print_amount_of_users(users_qs: list) -> None:\n    print(f'Current amount of users is {len(users_qs)}')\n''').body[0]\n\nis_pure, errors = is_function_pure(func_def_not_pure, with_errors=True)\nprint(f\"'print_amount_of_users' is pure: {is_pure}, Errors: {errors}\")","lang":"python","description":"This quickstart demonstrates how to use `mr-proper` programmatically by parsing an AST node (a function definition) and checking its purity using `is_function_pure`. It shows both a pure and a non-pure function example.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.0.7","pypi_latest":"0.0.7","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.7,"import_time_s":null,"mem_mb":null,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.8,"import_time_s":null,"mem_mb":null,"disk_size":"22M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.3,"import_time_s":null,"mem_mb":null,"disk_size":"22M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.2,"import_time_s":null,"mem_mb":null,"disk_size":"22M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"18.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mr-proper","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.9,"import_time_s":null,"mem_mb":null,"disk_size":"19M"}]}}