Skip to content
Python package for plotting Tupper's Self-Referential Formula
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github
tupper
.coveragerc
.editorconfig
.gitignore
LICENSE
README.md
setup.cfg
setup.py

README.md

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.
You can’t perform that action at this time.