{"id":14424220,"url":"https://github.com/igrek51/wat","last_synced_at":"2025-05-13T21:09:58.410Z","repository":{"id":239592660,"uuid":"799963434","full_name":"igrek51/wat","owner":"igrek51","description":"Deep inspection of Python objects","archived":false,"fork":false,"pushed_at":"2025-03-11T10:52:00.000Z","size":2515,"stargazers_count":1851,"open_issues_count":0,"forks_count":26,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-28T14:57:23.494Z","etag":null,"topics":["inspector","python","python-inspect"],"latest_commit_sha":null,"homepage":"https://igrek51.github.io/wat/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igrek51.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-13T12:49:45.000Z","updated_at":"2025-04-25T23:01:12.000Z","dependencies_parsed_at":"2024-08-06T13:00:02.631Z","dependency_job_id":"a4da37d2-6e80-4c69-81fc-0f751f2d7c67","html_url":"https://github.com/igrek51/wat","commit_stats":{"total_commits":79,"total_committers":7,"mean_commits":"11.285714285714286","dds":"0.10126582278481011","last_synced_commit":"ecdddade80c06c3c6a29869c725f0fd918b5ae71"},"previous_names":["igrek51/wat"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igrek51%2Fwat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igrek51%2Fwat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igrek51%2Fwat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igrek51%2Fwat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igrek51","download_url":"https://codeload.github.com/igrek51/wat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254029003,"owners_count":22002283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["inspector","python","python-inspect"],"created_at":"2024-08-30T02:01:51.223Z","updated_at":"2025-05-13T21:09:53.387Z","avatar_url":"https://github.com/igrek51.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# 🙀 WAT\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://github.com/igrek51/wat\"\u003eGitHub\u003c/a\u003e\n    -\n    \u003ca href=\"https://pypi.org/project/wat\"\u003ePyPI\u003c/a\u003e\n    -\n    \u003ca href=\"https://igrek51.github.io/wat\"\u003eDocumentation\u003c/a\u003e\n\u003c/div\u003e\n\nDeep inspection of Python objects.\n\n**WAT** is a powerful inspection tool\ndesigned to help you explore unknown objects and examine them at runtime.\n\n\u003e \"Wat\" is a variant of the English word \"what\" that is often used to express confusion or disgust\n\nIf you ever find yourself in a Python console, feeling lost and confused,\nand wondering \"WAT? What is this thing?\",\nthat's where `wat` inspector comes in handy.\n\nLaunch the Python Interpreter and execute `wat / object` on any `object`\nto investigate its\n**type**, **formatted value**, **variables**, **methods**, **parent types**, **signature**,\n**documentation**, and its **source code**.\nThis makes it particularly useful for debugging or understanding intricate data structures in Python,\nproviding a straightforward way to answer \"what\" exactly an object represents.\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-datetime-now.png?raw=true)\n\n\u003cvideo width=\"100%\" controls=\"true\" allowFullscreen=\"true\" src=\"https://github.com/user-attachments/assets/022ef89a-9e35-45be-9e2f-08d2c6af9075\" poster=\"https://raw.githubusercontent.com/igrek51/wat/master/docs/img/wat-set.png\"\u003e\n\u003c/video\u003e\n\nAlternatively, use `wat(object)` syntax for the same in-depth inspection.\n\n## Loading\n\n### Insta-Load\nIf you want to quickly debug something,\nyou can use this inspector **without installing anything**, in the same session.\n\nLoad it on the fly by pasting this snippet to your Python interpreter:\n```python\nimport base64, zlib\ncode = b'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'\nexec(zlib.decompress(base64.b64decode(code)).decode(), globals())\n```\n\nNow you can use `wat` object.\n\n\u003e [!Warning]\n\u003e Before executing **Insta-Load** snippet, it's recommended to verify what you're about to run.\n\u003e You can either:\n\u003e\n\u003e - Verify what's inside the extracted code beforehand:\n\u003e   ```python\n\u003e   print(zlib.decompress(base64.b64decode(code)).decode())\n\u003e   ```\n\u003e - Paste the content of [inspection.py](https://github.com/igrek51/wat/blob/master/wat/inspection/inspection.py) into your interpreter.\n\u003e   It has the same effect.\n\u003e - [Install package with pip](#install-with-pip) and review the code.\n\n### Install with pip\nAlternatively, install **wat** package and import inspection tool from **wat** module:\n```sh\npip install wat\n```\n```python\nimport wat\n```\nThis package has no external dependencies.\n\n### Load from Unicode Glyph\nFun Fact: You can load WAT from a single Unicode glyph.\n```python\nimport zlib\nglyph = '🙀󠅸󠆜󠇕󠅛󠇫󠅮󠇜󠇆󠄕ⷾ󠇯󠆧󠄠󠇔󠄟󠄤󠆝󠇍󠇖󠅎󠅺󠄁󠆔󠇐󠆭󠅬󠅯󠅒󠆣󠆎󠅕󠇈󠅊󠆂󠅂󠄒󠄈󠇮󠅲󠅖󠅢󠇄󠄥󠄗󠄤󠇗󠇒󠅶󠆱󠅀󠄞󠆢󠇏󠇐󠄇󠇋󠆓ⷴ󠅜󠇦󠅎󠅲󠄥󠇇󠄅󠇚󠄊󠆰󠅄󠇎󠇌ⷹ󠇦󠇌󠄹󠅧󠇎󠅥󠆆󠅞󠄶ⷵ󠄪󠇈󠆳󠄮󠅛󠆔󠅙󠇛󠆊󠄶󠄨󠅖󠇫󠆺󠇩󠅌󠇓󠄓󠇙󠅐󠅔󠇭󠅚󠄬󠄺ⷵ󠅚󠇫󠆎󠅆󠆨󠆧󠅶󠇛󠄾󠅙󠄢󠅞󠆷󠅝󠄗󠇕󠆵󠆂󠄺󠆩󠆶󠆓󠇠󠅴󠇝󠄕󠅵󠆕󠆕󠆓󠇠󠅼󠆻󠄖󠅏ⷾ󠅬ⷰ󠇩󠅷ⷰ󠆆󠇡󠅟󠇕󠇕󠆲󠆸󠄾󠅾󠄒󠇀󠅏󠅻󠄃󠇔󠇇󠇁󠆼󠆮󠅋󠅺󠇏󠄷󠅕󠄮󠄚󠆫󠆡󠆪ⷳ󠅺󠇑󠅚󠄍󠅥󠅝󠅝󠅛󠆯󠆋󠄺󠄗ⷶ󠅫󠅖󠆖󠄎ⷽ󠆺󠄩󠄾󠅤󠆝󠄚󠄲󠇆󠇒󠅉󠇗󠄵󠇅󠅼󠄃󠇣󠅸󠇒󠅬󠄅󠄔󠅭󠇗󠇐󠇛󠆇󠆬󠇜󠇀󠄫󠄬󠆑󠅞󠅡󠇡ⷰ󠅆󠄫󠅔󠄳󠅦ⷳ󠅒󠄜󠅚󠆄󠇋󠄄󠆭󠆻󠆸󠆮󠆲󠅮󠇓󠅀󠆛󠆒󠇚󠄅󠇌󠅷󠇅ⷴⷵ󠇂󠅯󠇎󠇅󠅒󠅩󠄧󠅝󠇖󠇍󠄪󠇫󠆢󠅺ⷾ󠇓󠄤󠅸󠄺󠅡󠄑󠄦󠇟󠅤󠅥󠄫󠄦󠅲󠅪ⷵ󠇆󠇂󠅓󠅯󠄨󠄹ⷵ󠆌󠅢󠇓󠇏󠄤󠄳ⷵ󠆶󠇞󠇌󠇋󠅢󠆡󠇞󠆠󠆋󠄟󠇣󠅣󠄩󠅮󠇔󠅝󠇢󠅨󠄲󠅢󠄎󠇨󠆷󠇦󠆀﻿󠄄󠅵󠆃󠄐󠆚󠄓ⷾ󠄣󠅙󠇁󠅟󠅺󠄀󠄱󠆄󠆿󠅌󠄋󠆳󠇅󠅿󠅴󠆫󠄔󠄥󠄠󠅵󠆒󠇕󠆘󠄘󠆫󠄷󠇝󠅺󠇓󠄥󠅥󠇑󠅶󠅑󠆺󠄭󠅄󠆙󠆧󠅊󠅞󠅥󠅑󠆉󠆖󠇅󠇅󠇬󠇇󠅌󠅒󠄬󠇑󠆚󠆧󠅭󠆗󠄃ⷱ󠆴󠅨󠆳󠆮󠇛󠅆󠅲󠆝󠆤󠅨󠇑󠆬󠄊󠇐󠅀󠅺󠅗󠇤󠇝󠅍󠅒󠆷󠇓󠅫󠇑󠆥󠆺󠆵󠄭ⷾ󠄡󠆢󠅸󠆺󠆨󠇋󠇍󠆪󠅪󠄵󠄕󠄳󠄲󠆅󠇉󠅅󠇓󠅅󠇏󠅀󠄿󠇝󠆶󠄔󠇓󠆗󠄧󠅧󠇁󠅧󠅁ⷸ󠇋󠄿󠅿󠄎󠆃󠆧󠄞󠄴󠅴󠆜󠇍󠇞󠇏󠇎󠅣󠄟󠄤󠅛󠆯󠅅󠆕󠅇󠄟󠆋󠇐󠄈󠆰󠆬󠄪󠄈󠄯󠆫󠅰ⷺ󠅓󠅝󠅔󠄑󠇃󠇅󠅤󠅅󠄏󠄊󠇧󠅘󠄉󠆇󠇟󠆧󠅲󠅋󠅩󠇞󠆈󠄾󠄠󠄟󠆐󠅞󠆋󠅊󠄴󠆠󠆎󠆔󠄇󠄁󠇪󠆲󠆎󠆘󠄉󠄰󠇛󠆔󠅶󠅎󠄢󠄍󠆖󠇟󠅸󠄪󠇒﻿󠅹󠆳󠄑󠆊󠇡󠆵󠄚󠆌󠆏󠄸󠅆󠆫󠇈ⷴ󠄅󠅉󠆂󠆨󠇔󠆋ⷶ󠇠ⷶ󠆤󠇐󠅕󠆬󠅓󠅐󠅇󠇝󠅄󠅺ⷲ󠆸󠇇󠅷󠆸󠅣󠅱󠆞󠆟󠆝󠆼󠄹󠇟ⷳ󠇞󠇞󠆑ⷰⷶ󠇁󠅎󠇓󠇭󠅃󠆢󠄓󠅠ⷹ󠄏󠄠󠄀󠇉󠄸ⷽ󠄨󠄕ⷲ󠅮󠆓󠅡󠇏󠅟󠅦󠄧󠆯ⷷ󠄻󠆳󠆪󠆽󠇬󠄏󠆵󠄼󠇑ⷵ󠅨󠅱󠇢󠅋󠅄󠆿󠅐󠄠󠄬󠆯󠇁󠆹󠇈󠅡󠄹󠄬󠅢󠆋󠆄󠅝󠅧󠆍󠆨󠆺󠄶󠄉󠄧󠆁󠄴󠆖󠄔󠆭󠆜󠆛󠅩󠅠󠅫󠅍󠆢󠆵󠄢󠇉󠄞󠆐󠆍󠄚󠆥󠄧󠆗󠄍󠅲󠅮󠆴󠄱󠇩󠄽󠄣󠆘󠄔ⷶ󠅟󠇃󠇦󠄑󠆦󠅩󠄩󠆪󠄴󠄅󠆦󠇞󠇕󠆕󠆈󠇭󠅍󠇙󠅬󠇍󠇋󠇨󠇄󠅀󠅭󠄦󠅵󠇭󠄏󠆺󠅸󠄭󠆖󠆊󠇄ⷽ󠅂󠆬󠄻ⷲ󠇩󠆳󠆦󠆩󠄛󠅷󠆆󠄵󠆆󠄋󠆟󠅟󠆄󠄰󠇃󠄰󠅠󠄤ⷾ󠄒󠆰󠆑󠇖󠄐ⷾⷲⷳ󠆿󠅂󠆳󠆹󠆵󠇯󠅏󠅈󠇔󠄊󠄲󠇕󠇭󠄑󠅒󠅎󠄂󠆽󠄋󠇆󠅭󠅏󠅇󠄑󠆣󠅞󠇕󠄤󠆗󠄇ⷾ󠆖󠆧󠆁󠆇󠇁󠆽󠄇󠆋󠆂󠆮󠄠󠆫ⷲ󠄠󠅂󠆧󠄪󠅷󠄽󠅻󠇪󠆘󠇚󠅇󠄖󠇍󠆔󠇠󠄀󠄷󠅕󠄗󠆡󠆳󠆉󠅱󠄟󠄾󠄻󠆨󠆞󠇗󠆧󠆯󠇞󠇯󠆏󠆎󠆎󠅶󠅀󠅉󠅿󠅭󠄓󠇯󠇯󠄸󠄋󠄁ⷽ󠇍󠅅󠄏󠄇󠆤󠄋󠅈󠄓󠆘󠇀󠄂󠆻ⷲ󠄽󠄘󠆆󠄕󠅚󠆠ⷴ󠅺󠇠󠇬󠄩ⷼ󠅫󠅗󠇢󠆬󠇐󠅚󠅢󠅛󠅯󠆚󠆅󠇔󠄓󠄿󠆧󠄈󠄖󠄹󠆪󠇁󠄸󠅂󠅽󠆏󠄰󠅌󠄞󠇈󠅙󠆋󠅤ⷷ󠆲󠇚󠅱󠆫󠇙󠄕󠆖󠄞󠄸󠅁󠇒󠇀󠆙󠅊󠅔󠇚󠆤󠆅󠄎󠆑󠅇󠅩󠄁󠆡󠄠󠄵󠇭󠆎󠄯󠆟󠄄󠆷󠅢󠆛󠆔󠇙󠅪󠆞󠅧󠅄󠅻󠅌󠆿󠆧󠅨󠅠󠄽󠇛󠄢󠆏󠄎ⷻ󠄳󠆗󠅸󠅭󠇚󠆂󠆬󠄠󠄉󠅩󠄣󠄃󠆯󠆡󠄹󠆘󠄜󠆚󠆜󠆹󠆆󠇍󠆇󠅌󠅀ⷶ󠄒󠇤󠅅󠇣󠆙󠆐󠅌󠄖󠆠󠄟󠇂󠅰󠇖󠅴󠇭󠅝󠇑󠇝󠅄󠆰󠅷󠅂󠆶󠄼󠇬󠄀󠆆󠆬󠅦󠇇ⷺ󠄸󠇇ⷰ󠅍󠆗󠆛󠅣󠅗󠄛󠇐󠇗󠄕󠇕󠅆󠇨󠅆󠆕󠅈ⷴ󠇦󠆖󠅓󠄓󠆢󠆄󠄚ⷷ󠄾󠄜󠆴󠆜󠆝󠄏󠆀󠆱󠇯󠅙󠅞󠅦󠆭󠆘󠇑󠄣󠆈󠄳󠇈󠇚󠅀󠄌󠇁󠄘󠇦󠆴󠅓󠅈󠆴󠅥󠅲󠄸ⷻ󠄈󠄧󠄂󠅼󠅌󠄘󠄸󠅆󠅡󠇩󠄡󠆴󠇅󠇈󠆯󠄚󠄵󠇘󠅎󠆂󠅈󠆤󠆛󠆐󠄒󠇅󠇧󠄇󠅁󠇘󠆊ⷼ󠆄󠆚󠅼󠅙󠅢󠅸󠅉󠄤󠄼󠆅󠄲󠄊󠄬󠇌󠇢󠅄󠇯󠇁󠅄󠅏󠇢󠄥󠆓󠄦ⷹ󠆓󠅿󠄧󠆖󠄔ⷴ󠄓󠄹󠆄󠄄ⷾ󠅉󠄋󠅽󠇐󠇅󠆲󠄦󠄜󠇍󠆦󠄖󠄮󠆨󠅕󠅹󠄍󠅃󠅭󠄢󠆮󠅔󠅰ⷴ󠄃󠆮󠆂󠆂󠇇󠇄󠇄󠆑󠅸󠄐󠄲󠆌󠄠󠄞󠇄󠅺󠆳󠄏ⷹ󠆤󠅣󠇋󠅌󠇅󠆲󠆸󠅏󠅂󠄮󠅗󠅔󠅖󠇢󠆒󠇕󠄍󠄤󠅸󠆐󠇇󠄭󠄷󠄕󠇭󠇗󠄑󠆈󠆬󠇝󠅖󠆋󠄀󠆅󠄲󠄈󠇣󠅐󠆣󠅓󠄴󠅝󠄫󠇑󠇝󠇔ⷹ󠅀󠇇󠅼󠅓󠆔󠅝󠅡󠅈󠅮󠆲󠅶󠄨󠄄󠄎󠄰󠅣󠆳󠅡󠅻󠅼󠇕󠄟󠇚󠆙󠆬󠅶󠆢󠅿󠆝ⷽⷽ󠇇󠇓󠄳󠇈󠆒󠅸󠇘󠅞󠄶󠆿󠄺󠅹ⷻⷶ󠇤󠇥󠇛󠇙󠅾󠆇󠄓󠆪󠇖ⷷ󠅯󠆾󠅽󠅷󠅲ⷾⷽ󠄙󠄴󠄛󠇩󠆛󠆤󠅊󠅛󠆇󠇯󠇘󠄇󠄌󠅂ⷲ󠆡󠄖󠄎󠅔󠅌󠅤󠄂󠆁󠆲󠆃󠇓ⷷ󠆾󠄑󠅌󠅠󠅏󠇤󠆐ⷵ󠅤󠄨󠅜󠄶󠄋󠇏󠄃󠇨󠅕󠄮󠆳󠆢󠄔󠅹󠇐󠇕󠄁󠇌󠄐󠇘󠆱󠄢󠇘󠇑󠅞󠄑ⷱ󠄞󠄞󠆅󠇍󠆽󠄓󠇗󠄥󠇯󠆸󠄃󠄬󠅞󠇥󠄐󠄧󠇞󠄗󠄭󠇭󠇞󠄞󠄓󠅺󠅋󠇋󠅝󠄴󠆥󠆴󠄺󠅲󠄊󠄋󠆢󠅟󠇒󠆄󠇬󠄇󠅒󠆊󠅒󠆐󠆱󠇡󠇠󠇪󠄺󠄲󠆻󠇏󠄊󠄧󠆐󠅿󠄵󠄅󠆹󠄲󠅼ⷳ󠆢󠄄󠄹󠄁󠄤ⷷ󠆪󠄅󠆊󠅖󠅣󠄞󠅩󠄠󠅜󠇒󠇩󠆀󠅞󠆓󠆅󠇪󠅱󠆨󠅻󠅢󠅝󠇓󠄻󠆳󠆓󠆴󠅩󠅲󠅼󠆊󠅝󠅣󠄌󠅔󠇆ⷾ󠇃󠇉󠇙󠄛󠆶󠄻󠄝󠅕󠆵󠅉󠆞󠆾󠆞󠇭󠆥󠇚󠄐󠅹󠄟󠄤󠇁󠅎󠇏󠆪󠄔󠇨󠅱󠇕󠆉ⷻ󠅎󠆅󠇍󠆢󠅩󠆹󠄺󠆛󠄄󠇩󠄄󠇦󠅮󠆻󠄄󠆻󠆧󠆐󠅂󠅷󠄅󠇭󠅓󠅊󠆹󠅌󠆙󠇔󠅶󠆸󠄃󠄱󠆽󠅵󠅊󠄡󠄃󠄔󠇇󠇁󠆋󠇠ⷹ󠆳󠅧󠅽󠇃󠇓󠅃󠄮󠆎󠆡﻿󠅊󠅕󠆓󠅔󠅮󠅂󠇪ⷺ󠅤󠅰󠅬󠅟󠇁󠇒󠅍󠄌󠆨󠅗󠄪󠆉󠆤󠅤󠆒󠇖ⷾ󠄆󠄀󠇉󠄚󠅉󠆺󠅮󠆒󠇚󠄏󠅤󠆪󠅎󠅞󠆪󠄆󠄿󠆐󠆜ⷶ󠇦󠄵󠅮󠄢󠆰󠄓󠇍󠇟󠇈󠅮󠅌󠅚󠄟󠆑󠆱󠄞󠆀󠄽󠇆󠅬󠇏󠇉󠅠󠆡󠅁󠅣󠅟󠅖󠅾󠅊󠇬󠆂󠄟󠄀󠆖󠄆󠇥󠅬󠄞󠅻󠇟󠅠󠇂󠄿󠄁󠄇󠆆󠆞󠄨󠅹󠅦󠇔󠅒󠆴󠇠󠄨󠆺󠆬󠅚󠇨󠇡󠆸󠄩ⷺ󠅓󠄞󠄩󠆧󠅺󠅾󠆶󠄏󠅷󠆲󠇆󠆕󠆬󠄞󠄩󠄰󠄮󠇆󠇇󠅜󠆋ⷶ󠇢󠇯󠅎󠇟󠇍ⷶ󠄸󠇄󠅙󠆪󠅍󠆏󠇜󠆎󠇓󠆟󠆟󠅽󠄿󠇛󠇣󠆐󠅑󠅺󠄺󠆲󠄚󠄇ⷸ󠇦󠇤󠇭ⷻ󠇙󠆞󠄆ⷹ󠄐󠅽󠅹󠅀ⷸ󠇯󠆠󠇀󠄨󠇫󠆬󠆋󠄇󠄄󠆣󠄗ⷵⷽ󠅷󠄯󠅧󠅧ⷻ󠇝󠅀󠇩󠄾󠄈󠆛󠄗󠆋󠆮󠄏󠆧󠄔󠆈󠆽󠅽󠄭󠄪󠄅󠇂󠇆󠅼󠄞󠆏󠅃󠇣󠄡󠇘󠄸󠄴ⷶ󠄾󠄆󠅚󠆞󠅥󠅐󠄆󠅤󠄥󠆟󠅙󠅵󠄍󠆉󠇔󠆼󠇉󠄖󠆷󠄐󠅽󠄀󠅰󠅱󠆓󠄴󠅢󠆺󠇜󠆔󠄥󠆽󠅄󠇡󠇗󠇑ⷴ󠅩ⷼ󠄢󠆜󠄨󠄄󠇍󠇩󠄀󠇩󠆸󠄼󠇉󠆁󠅾󠇝󠅷󠆴󠅽󠆌󠇩󠄵󠇤󠄿󠇫󠇨󠅹󠇬ⷸ󠇞󠄗󠆎󠄊󠅼󠅴󠄴󠅣󠅵󠅚󠇣󠆥󠄄󠅽󠄍󠇀󠆣󠄫󠄤󠅫ⷻ󠆰󠇐󠅞󠄄󠅟󠄎󠆸󠅕󠇗󠇜󠅦󠅧󠅧󠆧󠅧󠇇󠄐󠇜󠅫󠇈󠇁󠇄󠆺󠇜󠄆󠄕ⷸ󠅬󠆑ⷻ󠆦󠆂󠆮󠄍󠆽󠄸󠇌󠅺󠇀󠇜󠅨󠆍󠆻󠇝󠇞󠆳󠆴󠅎󠆬󠇚󠄤󠆂󠅑󠆮󠄧󠆸ⷵⷸ󠇇󠇈󠇤ⷹ󠄊󠅿󠅄󠇈󠆕󠄛󠆤󠇭󠅜󠆺󠄭󠆦󠄄󠄞󠇅󠅎󠇘󠅵󠇣󠄭󠆍󠆠󠄸󠅪󠆎󠆓󠆨󠄭󠅾󠅨󠄝󠅲󠄕󠄻󠆍󠇠󠇨󠇒󠅛󠄥󠆝󠅙󠄦󠇦󠅸󠄳󠄊󠆱󠄕󠅏󠅅󠆵󠄍󠄃󠅾󠇑󠇭󠄧󠆼󠆈󠄂󠅯󠄶󠆘󠄹󠆕󠆵󠅗󠅸󠄂󠅊󠆾󠅐󠇓󠅆󠆒ⷸ󠅳󠆵󠄁󠄎󠆳󠄊󠅾󠆛ⷸ󠇀󠄇󠄃󠄷󠇆󠆶󠅭󠅙󠇖󠄆󠄬󠇛󠇮󠆿󠅠󠅙󠇥󠆐󠅻󠅰󠆗󠅹󠅱󠄵󠅤󠅗󠆽ⷰ󠇢󠄱󠅏󠇒󠆆󠅦󠄔󠄷󠅎ⷲ󠆟󠆷󠆔󠆋󠇃󠆆󠅲ⷵ󠄿󠅣󠄧󠄗󠆏󠄷󠆓󠆫󠅁󠄫󠇑󠇇󠆻󠆩󠇔󠇕󠆪󠇎󠄷󠄥󠇗󠇌󠇩󠄴󠅍ⷹ󠄵󠅍󠆕󠆌ⷹ󠅝󠄅󠅟󠅌󠄅󠅥󠄋󠆟󠆚󠄃󠄅󠆕󠆐󠆩󠅍ⷻ󠆐󠅻󠅑󠅳󠅱󠄙󠆷󠄿󠇨󠅑󠆙󠆂󠆑ⷷ󠇓󠅑󠅒󠅝󠆷ⷴ󠅎󠆘󠅓󠅣ⷻ󠆪󠆌󠆤󠅦󠄪󠄤󠅗󠅍󠇭󠇖󠆑󠆤󠄯󠆐󠇥ⷽ󠄤󠆘󠅧󠆭󠄠󠄜󠇔󠆞󠆨󠄶󠄫󠆺󠆒󠆈󠆴󠆠󠆐󠇔󠄻󠄍󠆒ⷻ󠇫󠆞󠅲󠅂󠆔󠆕󠆅󠇑󠇢󠆩󠄀󠅔󠅎󠄮󠄅ⷾⷴ󠇎󠆐ⷰ󠆇󠆏󠄽󠄜󠆭󠅩󠄰󠅽󠄄󠄱󠅴󠅋󠄢ⷳⷼ󠄆󠇏󠅇󠅔󠄏󠇄ⷱ󠇅󠅭󠅊󠅭󠇑󠄟ⷴⷶ󠆡󠅷󠅫󠇩ⷸ󠆊󠄘󠅶󠆍󠆧󠄛󠄣󠅺󠅲󠇎󠇉󠅴󠇟󠅴󠄉ⷵ󠅥󠇥󠆀󠆙󠄥󠅸󠄧󠆕ⷲ󠇞󠄍󠄩󠆎󠄃󠅇󠇇󠅽󠆸ⷽ󠆱󠇕󠆈󠇦󠅞󠇕ⷽ󠄼󠇙󠅡󠄄󠆋󠇚󠄔󠇥󠄉󠄥󠆍󠅿󠅐󠆗󠄋󠅫󠇏󠄎󠆓󠇄󠅎󠅙ⷺ󠆘󠅵󠆈ⷻ󠄵󠆔󠅈󠄭󠇔󠅍󠇦󠆬󠄜󠄑󠆕󠅉󠆎󠆟󠅻󠆶󠅞󠄭󠇃󠆷󠆎󠄼󠄲󠆹󠇈󠇈󠄒󠄳󠄴󠄽󠅪󠇑󠆥󠇎󠅔󠄞󠅒󠆙󠅺󠄥󠅓󠄧󠆓󠅼󠄾󠄭ⷻ󠄏󠄁󠅩󠄐󠅹󠄯󠆼󠄱󠄼󠆎󠄑ⷰ󠄘󠅽󠄂󠅮󠄳󠄻󠅼󠆅󠄷󠆴ⷰ󠄨ⷼ󠄛󠇑󠅙󠇇󠇍󠇡󠇄󠇁󠄲󠇇󠇀󠅲󠄢󠅙󠆌󠇙󠆋󠅶󠄖ⷸ󠅑󠆓󠄫󠄐󠅧󠅶󠄛󠅭󠅬󠅺󠇫󠅄󠇘󠄖󠇖󠇇󠅌ⷾ󠅚󠅂󠇘󠅳󠇛󠅘󠇞󠄁ⷸ󠄠󠄈󠄔󠇨󠅸󠅺󠄹󠅤󠄽󠇪󠄤󠇤󠆠󠇩󠆨ⷳ󠇊󠄫󠅃󠇂󠆵ⷵ󠆨󠇚󠅝󠄊󠅞󠆥󠄼󠅃ⷳ󠅶󠄅󠇟󠄲󠄒󠆇ⷻ󠅣󠅧󠆓󠄒󠄮󠅀󠄪󠅨󠅢󠇓󠄗󠇝󠄣󠅎󠅴󠇬󠆊󠆝󠄰󠅈󠄟ⷶ󠄪󠅼󠇐󠅰󠆄󠆁󠆑󠇡󠄏󠄞󠄺󠆰󠅪󠄆󠅼󠅪󠄮󠇖󠇝󠆍󠇣󠅹󠆕󠄋󠅝󠅬󠄚󠆌󠅇󠄼󠄬󠇖󠇬󠆤󠇈󠅋󠄃󠅅󠆇󠅋󠅫ⷻ󠄳󠆌󠄘󠆨󠄶󠆷󠇦󠄵󠄳󠇐󠇯󠇩󠄲󠆝󠄃󠄛󠅎󠇤󠇄󠅶󠇇󠆈󠆔󠄸󠇛󠅈󠄿󠅍󠄂󠅩󠅋󠇖󠇩󠇞󠅇󠄩󠆴󠄢󠄎󠆫󠅀󠇞󠄖󠅩󠇠󠇩󠆭󠇘󠅢󠄲󠄿󠅸󠅘󠇦󠆥󠅹󠆒󠇤󠄂󠆱󠆮󠄤󠄫󠆚󠅬ⷸ󠇨󠅌󠆞󠇬󠄻󠆔󠅱﻿󠄶󠅳󠇠󠄤󠇭󠅗󠄜󠆢󠅙󠆧󠅝󠇖󠄉󠆚󠄔󠄳󠇔󠆦󠇭󠅦󠄞󠆅󠆗󠆗ⷷ󠇏󠇧󠆗󠆗󠄗󠆗󠆗ⷹ󠅧󠇑󠅗ⷸ󠄻ⷾ󠇓󠄊󠆓󠅏ⷸ󠅇󠅔ⷲ󠆋󠆠󠄟󠄳󠄙󠆐󠆎󠆎󠆎󠇤󠅥󠄆󠄟󠅹󠅓󠆉󠆍󠅧󠆳󠇢󠄾󠅛󠅁󠆌󠄋󠄶󠇕󠅭󠅕󠇟󠅕󠄲󠅝󠅨󠅡󠄼󠅻󠅩󠇤󠄉󠅢󠅼󠇑󠆥󠅩󠇔󠆊󠅲󠄹󠄉󠆞󠄾󠅕󠆟󠅛󠇜󠇞󠅥󠇍󠆵󠅽󠅘󠆅󠄃󠆦󠆩󠇛󠆝󠆸󠆯󠇞󠅘ⷹ󠄉󠇎󠅮󠄿󠆂󠅑󠅔󠇩󠆺󠆩󠆯󠄱󠇚ⷱ󠆧󠄻󠄖󠅗ⷴ󠅱󠄁󠅳󠇥󠅚󠄲󠄚ⷰ󠅝󠇖󠄍󠆢󠆸󠅆󠇍󠆓󠆁󠄷󠆆󠇤󠇭󠅆󠆔󠅶󠄌󠅖󠇟󠆝󠆄󠇖󠆌󠅘󠅣ⷷ󠄦󠅔󠄃󠆿ⷾⷱ󠇤󠄼󠄰󠅂󠅦󠅁󠆾󠆰󠇈󠆭󠅩󠄼󠄈󠅔󠅙󠆲󠄌󠇏󠆛󠆭󠆓󠆜󠇀󠄚󠆂󠇟󠅊󠄠󠄕󠇧󠄁󠇙󠄛󠄲󠆅󠄴󠆵󠅘󠄖󠄂󠅜󠆓󠄿󠄘ⷴ󠄫󠅅󠄀󠅞󠇋󠆡󠅳󠇆󠅍󠆝󠆏󠄶󠆾󠅓󠅰󠄊󠄅󠅲󠇛󠇣󠇋󠅊󠅛󠄷󠆞󠄶ⷰ󠅍󠅮󠆟󠄧󠇮󠆳󠆦󠆿󠄩󠅲󠄻ⷴ󠄅󠅦󠄛󠆑󠄟󠆕󠄾󠄱ⷶ󠇡󠄹󠅆󠅙󠄸󠄤󠄻󠅽󠅇󠆪ⷱ󠅼󠄺󠇜󠇍󠄽󠆪󠆪󠆮󠄾󠇏󠇦ⷳ󠅆󠅼󠄨󠄠󠇦󠇦󠇬󠄛󠅸ⷾ󠆼󠅞󠅀󠆆󠄭󠆯󠄳󠅼󠄰󠇌󠆨󠅺󠅠󠇖󠄽󠅆󠅐󠅃󠅘󠄈󠇔󠅍󠇓󠅄󠄮󠆆󠅮󠇠󠅱ⷳⷹ󠅰󠅼󠆴󠇫󠇋󠇆󠇡󠆀󠆜󠆜󠄂󠅤󠄎󠇥󠅗󠆎󠄽󠇞󠄨󠄜󠅘󠅠󠆠󠆐󠆻󠄀﻿󠄡󠇑󠇝󠆍󠅨󠅠󠅷󠇟󠄈󠆥󠅾󠇄󠆾󠇋󠅚ⷾ󠄌󠄭ⷷ󠇁󠄸󠄗ⷲ󠇁󠇪󠄊󠅪󠇯󠆵󠆟󠄺ⷹ󠆴󠄀󠇨󠅘󠇛󠆢󠇜󠆠󠇆󠅋󠄬󠆛󠇙󠆇󠄎󠅈󠄖󠆶󠆌󠅅󠄤󠄷󠆐󠇅󠄮󠄨󠅩󠇔󠅘󠅻󠆖󠇘󠄵󠇃󠅘ⷼ󠆝󠅘󠇀󠆷󠄑󠇤ⷳ󠅄󠆖󠆣󠇎󠅈󠆑󠇐󠇦󠄣󠅝󠄷󠇙󠇖󠆂󠇊󠆋󠆖󠄮󠆇󠇉󠄗󠄯󠄷󠆥󠄂󠄬󠄘󠄞󠄼󠅗󠅛󠆗󠆢󠅯󠄴󠄰󠇚󠅂󠄑󠄨󠆅󠅅󠄏󠆥󠇭󠇁󠆼󠅂󠆙ⷹ󠅛󠆻󠆬󠅁󠅣󠇭ⷸ󠇞󠆏󠇢󠆁󠆭󠅎󠅄󠆁󠄉󠆎󠄣󠇘󠇗󠅥󠄽󠆷󠇀󠄭󠄀󠇮󠆱󠄐󠅂󠇟󠆻󠄪󠇧󠄍󠅫󠅊󠆡󠅨󠆂󠅁󠅹󠇤󠅕󠆥󠇤󠇓ⷺ󠇡󠅌󠆏󠄡󠄭󠅘󠅭󠇬󠅡󠇑󠅀󠅍󠆤󠇁󠆀󠆁󠄁󠆧󠄗󠅨󠄰󠄡󠆃󠆖󠇁󠆛󠄊󠇢󠅭󠅑󠆯󠆷󠆑󠄦󠆜󠇊󠆕󠅅󠆄󠅨󠅽󠇐󠆀󠆗󠇆󠄼󠇦󠆱󠅐󠄇󠅮󠅊󠇆󠆫󠇟󠄯󠇜󠇒󠆎󠄔󠇄󠅹󠆳󠇊󠆧󠅘󠇑󠄦󠄍󠆣󠆛󠅈󠄫󠄪ⷺ󠅌󠇉󠅠󠅢󠆒󠄬󠆃󠄉󠅙󠇀󠅛󠇗󠄂󠅂󠄣󠅡󠄥󠄈󠄖󠅰󠄍󠄖󠅨󠇟󠆏󠆌󠄅󠅍󠆺󠅰󠄱󠇑󠇊﻿󠅮󠅄󠅾󠆮󠇪󠅿󠇒󠆋󠇠󠆨󠆽󠆡󠆬󠄠󠄞󠄀󠅈󠅹󠆁󠄉󠆏󠆇󠇭󠆷󠄮󠆳󠅭󠇊󠅽ⷺ󠆫󠅏󠆛󠄌󠆤󠇥󠅐ⷶ󠄏󠄹󠆤󠇈󠆜󠅑󠄾󠆄󠆝󠆈󠇠󠇡󠅃󠄔󠇂󠄸󠇈󠆣󠇬󠄯󠆅󠆇󠄰󠅱󠅹󠅃ⷺ󠅱󠆾󠄣󠅙󠇢󠅧󠆭󠆥󠄧󠆯󠅑󠄱󠆻󠄙󠄎󠄙󠆞󠇊󠆹󠅺󠅛󠆠󠄒󠅷󠄪󠅻󠅲󠅖󠅀󠅔󠅆󠅎󠅶󠇚󠇌󠄘󠅲󠅄󠇯󠄌󠅉󠆍󠇚󠇉ⷵ󠆇󠆰󠅷ⷱ󠄏󠆺󠅅ⷼ󠅋󠆛󠄸󠇜ⷷ󠄅󠅢󠄸󠇡󠇔󠄸󠆑ⷳ󠆬󠇫󠅵󠇤󠅾󠆛󠆅󠄣󠆽󠇬󠅰󠇈󠄸ⷼ󠄵ⷴ󠇉󠆦󠆛󠅵󠆎󠇇󠅢󠆾󠄱󠇡󠅈󠆐󠅮󠄂󠅹󠄯󠅬󠇙󠄾󠅝󠅯󠆤󠇎󠅀󠇍󠄢ⷼ󠇄󠅎󠆎󠄴󠅎󠇊󠆳󠅌󠆹󠆕󠇘󠄾󠅻󠅹󠇨󠄣󠄼󠆥󠇜󠄾󠆎󠆯ⷴ󠇍󠅽󠇐󠅎󠅙󠅁󠅃󠅶󠇪󠇘󠆽󠇧󠅲󠅽󠇨󠇞󠆷󠄒󠅔󠅮󠄺󠄌ⷷ󠅓󠇬󠄾󠄳󠅬󠄞󠄇󠇙󠅱󠆼󠇈󠄠󠆈󠆴󠆵󠄃󠄘󠅦󠆋󠇠󠆏󠆨󠄾󠄰󠆫󠇉󠄮󠅜󠅢󠅏󠅸󠄜󠇈󠆏ⷽ󠇃󠄎󠅦󠆃󠅗󠆜󠅴󠅏󠇨󠅵󠄻󠆅ⷱ󠅅󠅓󠅗󠄼󠄙󠇤󠇫󠇩󠆫󠇓󠆷󠆧󠅧󠅔󠄸󠇅󠄐󠅬󠇯󠅄󠄓󠇅󠆎󠇐ⷵ󠄄󠇣󠆅󠆱󠅤󠅌󠆏ⷴ󠄅󠄻ⷰ󠅙󠆾󠅟󠄓󠄘󠄷󠇎󠇆󠇤󠅗󠇌󠆖󠄨󠇨ⷾ󠅻󠅰󠇓󠇐󠆚󠆰󠅛󠄋󠇐󠄐󠇑󠇝󠄁﻿󠅷󠆂󠇇󠆖󠇧󠄽󠄃󠄙󠅴󠇋󠇦󠅬󠆓󠇦󠆈󠇭󠅘󠆎󠄊󠇈󠆋󠄏󠄺󠆜ⷻ󠇑󠇆󠇆󠅕󠅱󠆉󠇇󠅘󠄠󠅙󠆞󠅿󠄚󠅀󠇙󠇞󠄔󠇋󠇮󠇓󠄰󠆚﻿󠄀󠅆󠇝󠅼󠄢󠄏󠆟󠄊󠅐󠅾󠇢󠄂󠇤󠅷󠆡󠄚󠆄󠅜󠆻󠄛󠆏󠇐ⷵ󠆚󠆜󠇉󠇙󠅈󠄦󠆺󠅐󠇩󠅈ⷱ󠇅󠄏󠄦󠇚󠄧󠆻󠆖󠅽󠄡󠅉󠆮󠇜󠄴󠆄󠆒󠄷󠄃󠄫󠄭󠄿󠇤󠄚󠆑󠄃󠅖󠄮ⷰ󠄯󠄗󠅞󠇔󠅂󠆩󠄙󠄾󠅱󠅝󠆃󠅏󠇐ⷴ󠅘󠄾󠄸󠆺󠄝󠅢󠇢󠄣󠄢󠆧󠄗󠆀󠄎󠆃󠄧󠅉󠄐󠅲󠆊󠄘ⷾ󠅿󠇥󠆜ⷽ󠅥󠇈󠆲󠇣󠇗󠆮󠆃󠇉󠇝󠆅󠅈󠇈󠅏󠅘󠆉󠆅󠄊󠅋ⷹ󠇖󠆫󠅿󠅆󠇗󠄂ⷺ󠄋󠅇󠄋󠆇󠄃󠆕󠅂󠆓󠄕󠇀󠆠ⷾ󠆬󠆘󠆾󠆣󠄜󠅋󠄻ⷸ󠄠󠇯󠄽󠇖󠅮󠄌ⷲⷲ󠇤󠄬󠄉ⷱⷼ󠇯󠇢󠇙󠅗󠅟ⷾ󠅮󠇅󠆵󠄙󠅝󠄏󠇉󠇦󠇧󠆦󠄙󠄏󠅴󠅌󠇫󠄟󠅥󠄫󠄔󠆪󠄆󠇡󠄋󠇙󠇈󠆟ⷼ󠆘ⷶ󠇧󠆪ⷽⷴ󠇝󠇌󠆴ⷾ󠅞󠇏ⷷⷽ󠇌󠄀󠄫󠄌󠆺󠇁󠄷󠇍󠄊󠄂󠆿󠄎󠆓󠆭󠅟󠄘󠄮󠇤󠇧󠆯ⷽ󠆵󠆨󠄏󠅠ⷻⷸⷺ󠄣󠇘󠄾ⷻ󠇪󠇌󠇕󠄐󠅽󠆩󠇠󠆠󠇠󠄵󠇣󠅕󠅫󠇯󠅠󠇓󠆻󠆎󠅝󠇜󠅬󠆪󠅛󠇜󠇔󠇋󠆢󠇬󠄠󠄭󠇀﻿󠇬󠄈󠆎󠅳󠄬󠆅󠅸󠄯󠅳󠄈󠄈󠆎󠄅󠆴󠅏󠇂󠇘󠅋󠅟ⷸ󠄓󠅭ⷾ󠆏󠆁󠄈󠆭󠇮ⷼ󠄔󠅅󠄒󠆺󠅶󠇞󠇊󠆯ⷰ󠆍󠆯󠆅󠆜󠅷󠆍ⷹ󠄉ⷾ﻿󠄐󠅚󠄍󠅟ⷹ󠆭󠆀󠆐󠅊󠅸󠆵󠅆󠅘󠄠󠅕ⷺ󠄉󠇙󠄌󠅸󠅡󠆕󠄐󠇇﻿󠄆󠆺󠅑󠄋󠆖'\nexec(zlib.decompress(bytes(ord(c)\u0026255 for c in glyph[1:])).decode(), globals())\nwat / 'WAT is going on?'\n```\n\n## Usage \u0026 modifiers\n`wat` can quickly inspect things\nby using the division operator (for faster typing without parentheses). \nA short syntax `wat / foo` is equivalent to `wat(foo)`.\n\nYou can call `wat.modifier / foo` with the following **modifiers**:\n\n- `.short` or `.s` to hide the attributes (variables and methods inside the object)\n  and print only value, type, parent types, signature and documentation\n- `.dunder` to display dunder attributes (starting with double underscore)\n- `.long` to show non-abbreviated values and docstrings\n- `.code` to reveal the source code of a function, method, or class\n- `.nodocs` to hide documentation for functions and classes\n- `.caller` to show how and where the inspection was called (works in files, not REPL)\n- `.public` to show only public attributes (hiding private attributes)\n- `.all` to include all available information\n- `.ret` to return the object back after the inspection\n- `.str` to return the output string instead of printing it\n- `.gray` to disable colorful output in the console\n- `.color` to enforce colorful outputs in the console\n\nYou can chain modifiers, e.g. `wat.short.str.gray / 'foo'`.\n\nCall `wat.locals` to inspect local variables.  \nCall `wat.globals` to inspect global variables.\n\nYou can explore any object.\nIn Python, an \"object\" refers to not only to data structures,\nbut also to functions, classes, modules, built-in types, and more.\n\nType `wat` in the interpreter to learn more about this object itself.\n\nThere are several alternative syntaxes that are equivalent.\nChoose the one that works best for you:\n```python\nwat.short / 'foo'  # fast typing\nwat.short('foo')\nwat('foo', short=True)  # natural Python syntax\n'foo' | wat.short  # Unix piping\n```\n\n## Use Case Examples\n\n### Determine type\nIn a dynamic typing language like Python, it's often hard to determine the type of an object.\nWAT Inspector can help you with that by showing the name of the type with the module it comes from.\n\n```python\n\u003e\u003e\u003e wat.short / (1,)\nvalue: (1,)\ntype: tuple\nlen: 1\n```\n\n```python\n\u003e\u003e\u003e wat.short / {None}\nvalue: {None}\ntype: set\nlen: 1\n```\n\n```python\n\u003e\u003e\u003e wat.short / user\nstr: admin\nrepr: \u003cUser: admin\u003e\ntype: django.contrib.auth.models.User\nparents: django.contrib.auth.models.AbstractUser, django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.PermissionsMixin, django.db.models.base.Model, django.db.models.utils.AltersData\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-short-types.png?raw=true)\n\nNow that you've identified the actual type,\nyou can put the type annotations in your code to reduce further confusion.\n\n### Look up methods\nBy listing out methods with their signatures and docstrings, you can easily grasp how to use the unknown object.\n\n```python\nwat / ['foo']\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-list.png?raw=true)  \n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-set.png?raw=true)\n\nUse `wat.long` if you want to see full doscstrings.\n\n### Discover function's signature\nSee the docstrings and the signature of a function to learn how to use it.\n\n```python\nwat / str.split\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-str-split.png?raw=true)\n\n### Look up attributes\nList the attribues and their types to see what's really inside the inspected object.\n```python\nwat / re.match('(\\d)_(.*)', '1_title')\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-re-match.png?raw=true)\n\n### Explore modules\nAnother use case is to explore modules.\nYou can list the functions,\nclasses and sub-modules of a selected module.\n\n```python\nimport pathlib\nwat / pathlib\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-pathlib.png?raw=true)\n\nThen, you can navigate further, e.g. `wat / pathlib.fnmatch`.\n\n### Explore dunder attributes\nBy default, WAT Inspector hides attributes starting with `__`. Use `wat.dunder` to see them.\n```python\nwat.dunder / {}\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-dunder-dict.png?raw=true)\n\n### Review the code\nLook up the source code of a function to see how it really works.\n\n```python\nimport colorsys\nwat.code / colorsys.hsv_to_rgb\n```\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-code-wat-call.png?raw=true)\n\n### Prettify unreadable collections\nNested dictionaries and lists get nicely formatted, indented output:\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-nested-dict-pretty.png?raw=true)\n\n### Debug with breakpoint\nYou can use Python's `breakpoint()` keyword to launch an interactive debugger in your program.\nAttach to the interpreter and inspect things on the spot.\n\n```python\n(Pdb) import wat  # or paste Insta-Load snippet\n(Pdb) wat / foo  # inspect local variables\n...\n(Pdb) c  # continue execution\n```\n\n### Look up local variables\nUse `wat.locals` or `wat.globals` to look up the local and global variables respectively.\n\n![](https://github.com/igrek51/wat/blob/master/docs/img/wat-locals.png?raw=true)\n\n### Learn Python\nWith these snippets you can better understand Python internals.\n\n```python\nreversed([]) == reversed([])\n# False\nwat.s / reversed([])\n# value: \u003clist_reverseiterator object at 0x76749d1cb400\u003e\n# type: list_reverseiterator\n```\n\n```python\nwat / type('ObjectCreator', (), {})\n# value: \u003cclass '__main__.ObjectCreator'\u003e\n# type: type\n# signature: class ObjectCreator()\n\nwat / type\n# value: \u003cclass 'type'\u003e\n# type: type\n# signature: class type(…)\n# \"\"\"\n# type(object) -\u003e the object's type\n# type(name, bases, dict, **kwds) -\u003e a new type\n# \"\"\"\n# \n# Public attributes:\n#   def mro(self, /) # Return a type's method resolution order.\n```\n\n```python\nfrom typing import List\nwat.s / List[str]\n# value: typing.List[str]\n# type: typing._GenericAlias\n# parents: typing._BaseGenericAlias, typing._Final\n# signature: def List(*args, **kwargs)\n\nwat(str | None)\n# value: str | None\n# type: types.UnionType\n```\n\nExplore Python built-ins:\n```python\nwat / __builtins__\nwat / ...\n```\n\n### Inspect WAT itself\n```python\nwat.dunder / wat\nwat.code / wat.__truediv__\n```\n\n## Environment variables\n- `WAT_COLOR=\"false\"` to disable colorful output in the console.\n- `WAT_COLOR=\"true\"` to enforce colorful outputs even in non-tty environment.\n\n### Color theme\nYou can customize the color theme by setting the environment variable `WAT_COLORS`.\nHere's the default theme which you can modify with your own ANSI color codes:\n```sh\nexport WAT_COLORS=\"BAR=0;34,TRAIT=1;34,HEAD=1;37,STR=0;32,NUMBER=0;31,NONE=0;35,TRUE=1;32,FALSE=1;31,DOCS=2;37,KEYWORD=0;34,CALLABLE=1;32,SIGNATURE=0;32,VARIABLE=1;33,CODE=0;33\"\n```\n\n## References\n- Inspired by [Rich Inspect](https://github.com/Textualize/rich?tab=readme-ov-file#rich-inspect)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figrek51%2Fwat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figrek51%2Fwat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figrek51%2Fwat/lists"}