tupper

Calculates plots for Tupper's Self-Referential Formula.


License
MIT
Install
pip install tupper==0.10.1

Documentation

Tupper's Self-Referential Formula plotter

This Python package calculates and plots Tupper's Self-Referential Formula.

I've written about the formula and this project at Tupper’s Self-Referential Formula in Python.

The video that influenced this whole thing is here: https://www.youtube.com/watch?v=_s5RFgd59ao

        █                   █                █ ██ █     █                █  █ █     █    █ ██ █      █   █
        █                   █ █      █       █  █ █     █                █  █ █     █    █  █ █      █   █
██      █                  █  █      █    ██ █  █ █ █ █ █ ██ ████  ███ ███ █  █ █ █ █    █  █  █      █  █
 █      █                  █  █  █ █ █       █ █  █  █  █    █ █ █ █ █ █ █ █  █ █ █ █    █ █   █      █  █
 █      █                  █  █  █ █ █       █ █  █ █ █ █    █ █ █ ███ ███ █  █  █  █    █ █   █      █  █
 █      █               █ █   █   █  █  ██        █     █                  █  █ █   █  █       █   ██  █ █
███   █ █               █ █   █  █   █ █  █       █     █                   █ █     █  █      █   █  █ █ █
     █  █ ██ █   ██   ███ █   █      █   █        ███ ███                   █ ███ ███ █       █     █  █ █
███ █   █ █ █ █ █  █ █  █ █   █ ████ █  █                                                          █   █ █
     █  █ █ █ █ █  █ █  █ █   █      █ █                                                          █    █ █
██    █ █ █ █ █  ██   ███ █   █ █ ██ █ ████                                                       ████ █ █
  █     █                 █   █ █  █ █                                                          █      █ █
 █      █                  █  █ █  █ █                                                          █     █  █
█       █                  █  █ █ █  █                                                         █      █  █
███     █                  █  █ █ █  █                                                                █  █
        █                   █ █      █                                                               █   █
        ███                 █ ███  ███                                                               █ ███

Requirements

  • Python 3

Installation

pip3 install tupper

Console usage

python3 -m tupper

Optional arguments:

  • --help -- show usage instructions.
  • --k <number> -- the value of k to plot.
  • --true <string> -- the string to print for truthy points.
  • --false <string> -- the string to print for falsy points.
  • --export <filename> -- export the (x, y) coordinates and their truthy solution to a CSV file.

If you don't specify k then k =

9609393799189588849716729621278527547150043396601293066515055192717028023952664
2468964284217435071812126715378277062335599323728087414430789132596394133772348
7857735749823926629715517173716995165232890538221612403238855866184013235585136
0488286933379024914542292886670810961844960917051834540678277315517054053816273
8096760256562501698148208341878316384911559022561000365235137034387446184837873
7238198224849863465033159410054974700593138339226497249461751545728366702369745
461014655997933798537483143786841806593422227898388722980000748404719

Code usage

Solver class

To solve ad-hoc (x, y) points, import the Solver class and call the solve(x, y) function:

from tupper import Solver
# ...
s = Solver()
b = s.solve(x, y)

x() and y() functions are provided for yielding the coordinates of a graph:

from tupper import Solver
# ...
s = Solver()
k = 960939379918958...
for y in s.y(k):
    for x in s.x():
        b = s.solve(x, y)

StringPlotter class

StringPlotter exposes two functions for rendering graphs as text.

row() yields the characters for any given row:

from tupper import StringPlotter
# ...
sp = StringPlotter(true_mark="x", false_mark=" ")
k = 960939379918958...
for c in sp.row(k):
    print(c, end="")

graph() yields the characters for the entire graph, including newlines at the end of each row:

from tupper import StringPlotter
# ...
sp = StringPlotter(true_mark="x", false_mark=" ")
k = 960939379918958...
for c in sp.graph(k):
    print(c, end="")

Test data

The test_data directory contains CSV files for testing the calculation.

Each file contains three columns:

  1. The x coordinate.
  2. The y coordinate.
  3. The expected true/false solution.