# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 1
# self = https://watcher.sour.is/conv/115327461072009185
Not shown here but, this Shape class used on the linked sketch helps eliminate (by adding them to a set) not only Polygons that are visually the same but also shape rotations using a custom .__hash__() method :)

(A caveat to the reader: The code is messy because it sometimes retains remnants of abandoned ideas and lateral explorations, also, this is creative coding not software engineering) ![>>> Polygon >>> pa = Polygon(((0, 0), (0, 1), (1, 0))) >>> pa >>> pb = Polygon(((0, 1), (1, 0), (0, 0))) >>> pb >>> pa pb False >>> sa = Shape(((0, 1), (1, 0), (0, 0))) >>> sa Shape(((0, 1), (1, 0), (0, 0))) >>> sb = Shape(((0, 0), (0, 1), (1, 0))) >>> sb Shape(((0, 0), (0, 1), (1, 0))) >>> sa sb True >>> sc = Shape(((0, 0), (1, 0), (0, 1))) >>> sa sb sc True >>> ](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/115/327/438/862/411/647/original/864ba9a111bacc09.png)