Skip to content

Instantly share code, notes, and snippets.

View DominikPeters's full-sized avatar

Dominik Peters DominikPeters

View GitHub Profile

Mathematical writing guidelines

These guidelines explain how to present mathematical results in a way that human readers can easily understand and verify, and that respects the reader’s time and energy budget.

Reading order and forward references

A human reader is a first reader of the document. They have not read the document before starting to read it. Note the contrast to how an LLM understands a document: they first load the entire document into context, and then understand it with that context. So it is as easy for an LLM to understand a forward reference as a backward reference. This is extremely different for a human reader, who will usually stop reading if a sentence doesn’t make sense due to limited time (instead of reading the rest of the document).

Therefore, every sentence must make complete sense knowing only what has come before. As I mentioned, as an LLM it may be difficult to spot places where this is violated; if in doubt consider starting a small-model subagent (e.g. Luna or Haiku)

@DominikPeters
DominikPeters / parse-france-eu-election.ipynb
Last active June 9, 2024 21:20
Fetching and parsing election results for the 2024 European Parliament election in France
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Here is what I ran, worked on 2024-05-27:

sudo apt update
sudo apt install postgresql
sudo service postgresql start
sudo visudo

add following line to end of file:

@DominikPeters
DominikPeters / prop-fairness.py
Created August 19, 2023 12:55
Optimization code to find distribution with optimum distortion with respect to proportional fairness (Paper "Optimized Distortion and Proportional Fairness in Voting" by Soroush Ebadian, Anson Kahng, Dominik Peters, and Nisarg Shah)
import cvxpy as cp
import math
def compute_hi(rankings):
"""Compute h_i(a) for all voters and alternatives."""
hi = []
for ranking in rankings:
h = {}
for a in ranking:
h[a] = set(ranking[:ranking.index(a)+1])
@DominikPeters
DominikPeters / mes.js
Created August 10, 2023 10:41
JS implementation of the Method of Equal Shares with cost utilities and Add1U completion, including a pabulib file parser
// usage: node mes.js <path-to-pb-file>
const fs = require('fs');
const readline = require('readline');
function parsePBFile(filePath) {
return new Promise((resolve, reject) => {
const meta = {};
const projects = {};
const votes = {};
@DominikPeters
DominikPeters / latex-snippets.md
Last active May 7, 2024 09:54
LaTeX snippets that I often use in papers

For arXiv, run

latexpand --empty-comments --keep-includes --expand-bbl document.bbl document.tex > document-arxiv-v1.tex

Website version style

\documentclass[11pt]{scrartcl}
\usepackage[a4paper, total={16cm, 24cm}]{geometry}
\usepackage{authblk}
@DominikPeters
DominikPeters / mallows.py
Last active May 4, 2022 13:04
Sample from a Mallows distribution
# Adapted from https://github.com/martinlackner/abcvoting/blob/6aacadb0e3e70e4f83a82225b05730f72a6230d4/abcvoting/generate.py#L166
def mallows(reference_ranking, dispersion):
distributions = []
for i in range(len(reference_ranking)):
distributions.append([dispersion ** (i - j) for j in range(i + 1)])
while True:
vote = []
for i in range(len(reference_ranking)):
pos = random.choices(range(i + 1), weights=distributions[i], k=1)[0]
@DominikPeters
DominikPeters / nash-dynamic.py
Last active April 26, 2022 12:37
Compute Nash via Dynamic
def nash(N, A, u, rounds=500):
"N is set of voters, A is set of alternatives, u is a utility dictionary"
"where u[i,x] >= 0 is the utility of i for x, usually either 0 or 1"
p = {x : 1/len(A) for x in A}
for _ in range(rounds):
q = {x : 0 for x in A}
for i in N:
util = sum(u[i,x] * p[x] for x in A)
for x in A:
q[x] += (1/len(N)) * (u[i,x] * p[x]) / util
@DominikPeters
DominikPeters / remove-jstor-watermark.py
Created February 24, 2022 23:45
Remove JSTOR watermark from PDF
# first install pdftk. For recent MacOS version, get it here: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg
import os
os.system(f"pdftk input.pdf output uncompressed.pdf uncompress")
with open("fixed.pdf", "wb") as outfile:
for line in open("uncompressed.pdf", "rb"):
patterns = [
b"This content downloaded from",
@DominikPeters
DominikPeters / microtype-texpad.md
Last active January 27, 2022 19:55
Make Texpad and TexpadTex ignore microtype

I often use Texpad on documents that use the microtype package which makes texpad fall back to PDFLaTeX. Instead I want Texpad to ignore the included package. Here is a way to do this, by adding a fake empty local microtype package.

Make a folder with a fake microtype package:

mkdir .fakemicrotype
echo "\ProvidesPackage{microtype}" > .fakemicrotype/microtype.sty

Add the new folder to the TexpadTex search path: (Command+Shift+. to show hidden files in the folder picker)