214 lines
80 KiB
Plaintext
214 lines
80 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from PIL import Image\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"from bitarray import bitarray\n",
|
|
"\n",
|
|
"img = Image.open('../peacock.jpg')\n",
|
|
"img = img.resize((128, 128))\n",
|
|
"img = img.convert('P', palette=Image.ADAPTIVE, colors=16)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Playing around: median downscaling + bayer tiebreaker\n",
|
|
"pixels = np.array(img)\n",
|
|
"smaller = np.zeros((64, 64), dtype=np.uint8)\n",
|
|
"bayer2x2 = np.array([[0, 3], [2, 1]])\n",
|
|
"for y in range(64):\n",
|
|
" for x in range(64):\n",
|
|
" vs = pixels[y*2:y*2+2, x*2:x*2+2].flatten()\n",
|
|
" vs.sort()\n",
|
|
" if vs[0] == vs[2]:\n",
|
|
" v = vs[0]\n",
|
|
" elif vs[1] == vs[3]:\n",
|
|
" v = vs[1]\n",
|
|
" else:\n",
|
|
" bv = bayer2x2[y & 1][x & 1]\n",
|
|
" v = vs[bv]\n",
|
|
" smaller[y][x] = v\n",
|
|
"halfimg = Image.fromarray(smaller, mode='P')\n",
|
|
"halfimg.putpalette(img.getpalette())\n",
|
|
"\n",
|
|
"#plt.imshow(halfimg, interpolation='nearest')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.image.AxesImage at 0x7ce89033fec0>"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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oHbt2oVVq1ZFlOlozDGGbpJKS0tDt27dsHr1arWttrYWq1evRq9evZLYs/iwLAujRo3CkiVLsGbNGuTn50d83q1bNzRv3jxi3Fu3bsUXX3wRmnFfffXV+Ne//oWNGzeqf927d0dhYaGywz5GAOjTp0+98IFPP/0Up59+OgAgPz8fOTk5EeOsqKhAUVFRqMZ5+PDhesXqTjrpJNTW1gJoOuOUuBlTr169cPDgQZSUlKg2a9asQW1tLXr27NnofY4Fe4Latm0bXnvtNbRr1y7i80Ydo69uGI3EokWLrPT0dGvevHnW5s2breHDh1tt2rSxSktLk921mLnzzjutrKws64033rC+/PJL9e/w4cOqzR133GF17tzZWrNmjbV+/XqrV69eVq9evZLY6/iR3n2W1TTG+P7771vNmjWzpk2bZm3bts1asGCBdfLJJ1vPPfecajNjxgyrTZs21ksvvWR99NFH1s9+9rPAu2Yfz9ChQ61OnTopF/QXX3zRat++vTV+/HjVJozjrKystD744APrgw8+sABYM2fOtD744APl2eZmTNdee611ySWXWEVFRdbbb79tnX322YFyQW9ojEePHrUGDBhgnXbaadbGjRsjvo+qq6vVMRprjKGcpCzLsmbPnm117tzZSktLsy677DLrvffeS3aX4gKA9t+zzz6r2nz77bfWiBEjrFNOOcU6+eSTrRtvvNH68ssvk9dpHzh+kmoqY1y+fLl1/vnnW+np6VbXrl2tp59+OuLz2tpaa+LEiVZ2draVnp5uXX311dbWrVuT1NvYqKiosMaMGWN17tzZatGihXXGGWdY999/f8QXWRjH+frrr2vfxaFDh1qW5W5MX3/9tXXrrbdarVq1slq3bm3ddtttVmVlZRJGo6ehMe7cudP4ffT666+rYzTWGFmqgxBCSGAJ3W9ShBBCThw4SRFCCAksnKQIIYQEFk5ShBBCAgsnKUIIIYGFkxQhhJDAwkmKEEJIYOEkRQghJLBwkiKEEBJYOEkRQggJLJykCCGEBBZOUoQQQgLL/wePhiu1q8ME9QAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"#x = bitarray()\n",
|
|
"\n",
|
|
"predictions = {}\n",
|
|
"frontier = [0]*(img.width + img.height + 1 + 2) # 1 px corner, 2 px to cover the ends\n",
|
|
"\n",
|
|
"def get_diag_index(x, y):\n",
|
|
" return x - y + img.height + 1\n",
|
|
"\n",
|
|
"def get_neighborhood(x, y):\n",
|
|
" diag = get_diag_index(x, y)\n",
|
|
" return tuple(frontier[diag-1:diag+4])\n",
|
|
"\n",
|
|
"def get_prediction(x, y):\n",
|
|
" key = get_neighborhood(x, y)\n",
|
|
" if key in predictions:\n",
|
|
" return predictions[key]\n",
|
|
" else:\n",
|
|
" return 0\n",
|
|
"\n",
|
|
"pixels = np.array(img)\n",
|
|
"for y in range(img.height):\n",
|
|
" for x in range(img.width):\n",
|
|
" value = (pixels[y, x] + 16 - get_prediction(x, y)) % 16\n",
|
|
" predictions[get_neighborhood(x, y)] = pixels[y, x]\n",
|
|
" frontier[get_diag_index(x, y) - 1] = pixels[y, x]\n",
|
|
" pixels[y, x] = value\n",
|
|
"\n",
|
|
"encoded = bitarray()\n",
|
|
"run_value = pixels[0, 0]\n",
|
|
"run_length = 0\n",
|
|
"run_data = []\n",
|
|
"\n",
|
|
"def flush():\n",
|
|
" global run_length, run_value\n",
|
|
" run_data.append((run_value, run_length))\n",
|
|
" value = bitarray()\n",
|
|
" x = run_value\n",
|
|
" for _ in range(4):\n",
|
|
" value.append((x>>3) & 1)\n",
|
|
" x <<= 1\n",
|
|
" if run_length < 3:\n",
|
|
" for _ in range(run_length):\n",
|
|
" encoded.extend(value)\n",
|
|
" else:\n",
|
|
" for _ in range(3):\n",
|
|
" encoded.extend(value)\n",
|
|
" run = run_length - 3 + 1\n",
|
|
" encoded.extend(0 for _ in range(run.bit_length() - 1))\n",
|
|
" for i in range(run.bit_length() - 1, -1, -1):\n",
|
|
" encoded.append(run >> i & 1)\n",
|
|
" run_length = 0\n",
|
|
"\n",
|
|
"for y in range(img.height):\n",
|
|
" for x in range(img.width):\n",
|
|
" val = pixels[y, x]\n",
|
|
" if val == run_value:\n",
|
|
" run_length += 1\n",
|
|
" else:\n",
|
|
" flush()\n",
|
|
" run_value = val\n",
|
|
" run_length = 1\n",
|
|
"flush()\n",
|
|
"\n",
|
|
"transformed = Image.fromarray(pixels, mode='P')\n",
|
|
"transformed.putpalette(img.getpalette())\n",
|
|
"plt.imshow(transformed, interpolation='nearest')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"bitarray('0010000000000000010001000000000000000101001000000000000000010001110000000100000000000000010000100000000100000001000000000000100101110111111111110000000000000000111000100000001000100000000000000000110000001000000000000000001000001101001000100010001100000000001000100010010110011000000000000000100011001100110010001000000000000001001100110011011000100010001100110101010101001011001010100110000110000000000000000110101101000100010101100110000000000000000001010011001100110011101110100000000000000001110111011101110110000000000000001010111000000000000000001000101100110100010001001000000000000010111000000000000000001001100010000000000000000001000110001000000000000000001011000101000000000010000101000001010101010101000000000010000000000000000110001101000100010011010000000000000000000100010111100000000000000101110000000000000000100111100010000000000000001001000100010001101000000000000001110101001100010000000001000000000111000100000000011100000000000000010110000000000011100000000000000001011111000100000000000000001001111100000000000000000101111001000000000000000110011001100110100000000000000010001111000000000000001001001100010000000100010001000001000000000000100000001000100010010000000001001101010100010000000000000001111100101010101010111100000000000000001010000100000000000000000101010001000000000000001011100000000000000001100111011101110100000000000000010010001000000000000000110110000000000100000000000010010000000000000001101100110010100000101000000000000000000111000111011100000000011100000000000000000100110001000000000000100101100101010101001000000000000000110110000000000110100000000000000001001111011100000000000000000011110101000000000000100000000000000000100010001000000000000110101100110010100000111100000000000100000000000001111110000000000000011011111010000000000000001001110000011100000000000000011011100010000000000000000001110101110111000000000001000000000000000010101110000011110001000000000000100100000000000001101010011001000000000000010100110010000000000010000000000001000100010001100000000000001100100010001010000000000000001011111000000000000000111000100000000000000000101101001000000000000010010000000000000000110100101000111100000000000001011000000000000100000000100000000000000011011001100100000000000000001101111110000000000000000011011000100000000000000001000001000000000001000000000000010010001000000000000011110000000000000000010011111000000010000000000000000110111101110000000000000001000001000000000000000001011010010000000000000001010010000000000000000101111110000000000001001000100000000000000101010111000000000000111110000000000000000100001110000000000000000111011100000000000000111111000000000000000001101000010000000000000001100010001000101000000000000001010010000000000000011001000100000111000000000000000010011111000000000000001011010101011100000000000000001110111000000000000000000110000000100100000000000000010011100000000011100000000000000101110000000001000111100000000100000000001101000000010000000000000001100010000000000000010111100010000000000000010010001111100010010000000000000000101011110111000000000000001111110000000000000000100011111000000000000010000100000000000000010010001000100000000001100110100010001001000000000000001001110000000000000001001110000000000000001010001111100000000000010010000000000000001111110000000000000000101100010000000000001111100000000000000001001100100000000000000010000010000000000000001101110111011100110000000000000001011111111000100000000000000111010001000000010001000100100000000000000100001000000000001000000000000000010011111000100000001000100000000000000010110010000000000000000100010011000111110010000000000001111100000000000000001001011100000000000000010100010000000000000000101111111000000000000001110100111000000000000000110011001100110111101110000000000000011001000000000000001111110000111100000001000000000000001100001111100000000000000011011111000000001111000000000000111110000000000000000010100111110000000000000000110110010011000000000001000000000000001011101110000000000000001100001000100000000000010010000000000000111011101110110001000000000000000110011111111000000000000110001000100001011101111000000000000000010000111000000000000000101000100010000000000000001011111100000000000000010011111111100000000000000001100111100000000000000100001000000000000100010000000000000011100010001000000000000000001000001111000100000000000000011000001000100000000000000110111111111111100000000000000011101111000000010000000000000110010001000000000000010010001000000000000000011000010000011110000000000001111100000000000000010001100000100000000000001111100000000000000010100010000000000000001000111111110000000000000010110101010101010000000000000000101000001000011111100111111101110001000000000000001011100000000000100000000000000010111110000000000000010001100000000000000000101010001000000000001000000000000011111000000000000001011001100000011100000000000101110000000000000000001101001100110011111111111010111010111011101110110100000000000001111000100000000000000010000010000000000000000110101111111100001111111111111000100000000000000010100010001000101000000000000111110000000000000001111111100000000000000001011000010000000011110001000000000000111001100110011111111111111101110110000000000000011111100010000000000000111110000000000000000110011110111000000000000011111111111110101110001000000000000001011100010000000000000001001110000000000000000010000001000000000000010010000000000000000010001001000000000000010001110011001100100000000000100001100111011001111111111110101011110011110000000000000011011100000000000000101111000000000000000011011111000000000000011110000000001111000100000000000000010000010000000000000001111111000000100000000000000011000100000000000100000000000000111111000100000000000000010100010000000000010000100000000000001111001100110011010110011011111111111111111010111010000011110001000100011111111111111100001110000000000000010000100000000000000001111111100000000011110000000000010001000000000000001100001000000010000000000000100001000000000000000101100010001000000000000011111100001111000000000000010000100000000000000100110000001111000000000000001001111110000101010101010101110111111111000011101111111010001000000011110000111111111111011000000000000000001001011110111000000000000000100000100001110000000001110000000000000100010000000000000001001000111110000000000000100010000100010000000000000011100010001000011111111000100000000000001100100000000000000101110000000101110111011101101010101010111000000111111111111110111011011111010000000011011110111000001000100111111110000000000000000011001111000100000000000000011111100110111100000000000000101111000000000000000010100011000001000111111111101111111101000101001111111111111001000000110111011111111111111000000000000010111111111111100011010001000000000000001011100000000010101010000000000000001001001100010101101000000001110101110111011101100101010101010100000111011111000000010011010000000000000001000010001011100000000000000001100111011101110001000010000000000000010111000100000000000000100001000011100001000100000000000001000110011000000010001000000000000010111100011010011110111011101100111111010111110101111101011101111100000110100000000111000000000001000000000111111110000000000000011111110001000000001111111001100110011010111111011111111111101011101010010000000000000000100111000001001101011001111000000000000010100000001110000000000000000100100100000010001001110000011101110111010000000000000001001111011010001000000011111000100000000000010001000000000000011000100010111101111101011101110111001111010000000010111011101111110101111011011101110110010100110000011000000000000011000000000000000111111111000000010000000011111110111000011010000100011111000001100110011011010110111111111111011101011011100110100111100000101010100000000000011111000000000000001110010000000000000000010010010001000000000000000010011100000000000000110010111100000001111100011111111100000000000001010010111111010111110111110110000101111001011001100000011000000000000010110100000100110000000000101110111011010111000100000000000000100010001000000000000111101100110010001010001010010010001011110000000001100110100010101101111111111111010101101110011001101000100111100000000111100000000000100010010000000010000000010001101000000000000000101000010000000000000000100001110000000000000010111011101000100010010000000011110000111110010111101111101011101111101011000011011011111011111110111000000011110110111011101101000000000000001010111011111011100100111000000000000001011100001011001100110110001010100010001110111100010001000110000100011100101010010010011111100000000111110110111001011110011001111110000010101010101111101111111100000000111100000000000001011100000000000000011001100110011010100010000000000000000010001111111100101111000100000000000001011100000111100000001000000100000111100001111111001111011000011010011111000110011000000001011101111111011101110111000011010000000000110001111111010000001100000000101111101110111010000001000000001011001100110100001000100001100110100000011010010010011000100001100101010001000110110111111111111110000111010110111001100101111001100110100000011110000011010001001101000000000000100000000001000000000000000010011111000000000000001001111000000000011001000100010001001110111100010001010001000100010000000000000010110100101000100001111110101100001101101111100001000100000000000000100110101001100000000000100101110111011111011101000000000000010101111101110111010000000000101110000000000110011011101000001000111000100000101110000000010110010001000101100111011111000011111111101110111011101000010001011110000000000001010001010000001000010001000000000000000111000100000000000000100001010000110011001000100010010111100000000000011111111111101110000111110000000000000100101000000000000101100110011110111011000000000000111101110101110110000000000111101000000000000100111011001100110000010000000000000000100001100000000001100001111101100010000001000101110001000000000011001010110011011101110000000100010100010001000110011010110100000001000001001111111111100111010000100000000000110000010001000101011000000000000000100111000001110000000000000001011110111011110000000100000000000010100001100000000000000010010010001000101111100000000000001000010001000001100110100010110011001111010000101110111100001100110100001100001101000011000000101110111110111010111001100010010100000000111101110110111110101111101110111010111011001100110010000001100000000000001010010000011001100111000111110010111001000100010011011000000000000010111011111110111001111110000000010000000001000100010101101000111100000000111100001110000000000000000100100010000000000000100010010000110000000000000001101000100010000000000000101110011001101011101100000000001100000000000011101101110110011000000110011000010010000010001001111111100111110011111101111001100110011100000000001100111110111011111011011100000000000001000100010111100101110000011101101110111000100001100110010001001101101111100000000000011111111111111101101110010000011110000000011110000000000000011000010000111000000000000000001111000010000000000000111111011001100111101111011101010000110011001110100001100001100000011101100010000101010001000000000111111111111010111011111111111000011110111000000011111011011101000110111011000000000000111011101111000001101000001100110000001100110001000110100010001101111111100000000111100010000000011011011101100100000000000010000001101000000000100000000000100000000000000001010100010001111100000000000000010010001000100000001010001010101011011100011101101111010111010110000010000000011010000001110011100000001011111110000111000001111111011101111111111111000011110000000111110000111111101011110111101110101110110111000000100010000000010001000000000000011010000110011100010001101111000100010000011111111000011001011101101110010000000001111000000000000010111100000000000000101110000000000000000100001000000000000010001000000000000011000101000001000100000001111100000000000000011001111010101000100011101000100011111111111000011101110111111110111000100000001011111111111110111000001110010101101111011100000000011110000001010001000010011111111110011011111111010110000100000100010111011101101110100000000110011011100110101100101010110001110111111110011111111110100111111101011110000100000000000001001100000011000100000010000000000000001001110000000000000111100010000100100000110011010001000100000000000000100000100010000000000000001010111100000000000010100010001000110110011100100111111110001111000111111110011100000001000100000000110111001101110111111101110011011101101010000101010001110100000000010001101011101011101111111110101101111101001000100000001000000000000001011101111111101000100010001001101010000011010000111100001111111111101011110100000000000001000100011001101010000000000000011000010000000011100010001000101000000000110000000000000100010000000000000000100100001000000000000111100000011101110111101000100011111110001000000010000000000001001001110111110110101010000011011111111101011101110011011010011100010001000110010001000101010011011111001100001111000000110000100100101110000000000000010100010011001100101001000100011001010101101000001110111000010000000011101110101100100010000000000000100100011000000000000001010001000000000000011111011100000000000000101110000100000000000011100001000000000000001111110000000011111111000000000000001100001001101000001010001110111101010100011010100001111111111111000000000001001001111111111111010111110000110000111111110011110111001100101001110010000101000100010001011011111111111100011000111111111101010100010010000110011000011101100111011001110010101010101010100010011101110100001111111100000111101110110111000100000000000001111110000111100000000100100000000000001011111111000100001101110100000000000001011100000000000000101111000000000000001100001000000000000001110001001000100010100010100011101111100101001110111011101101000111011101111111011101111111111100111011100111111111011101101110010101010110101110001001001000100011101111111111111001100111111111110101110100010001000111001100110100111010001000010001000000011001100111010010101101000100100000000000001101110111011101000001001000000000000001000110011010001010000000000100000000000001010000000000000001100100010000000000000011001001101101110000000000000001111101101000000000000001100010001000000000000100100100011110101010011101110111010000100000010011111110100111111110000000011101011101111011010111011011100101001111010110101110001000000100100011101111111111100111011110000111110111001111010101001000000000010000001000010011001100111000100001100101010001000110110100100000000100000000000011011101101110010000000000000010111100000011000001011000100111001111000000000100000100000001000011100000001000000000000001100100010000000000000001100001000000010000000000000110010000100000000000001000010111101001110111110101000010000111110100011100000001000000001111000011111111111010111110111100111101101010101100110001110100000000010010011111011111111100010001000110100000011111101101001111000100011010000000001000100010010011001000000000111100010000000111001011000000001010111000111101101100000000000000010000001000000000000000101000100000000000000011000101000000000000000010000100000000000011111000000000000010001100100000000000001000100000000000100100100000100010001100000000000100100111000011110000000011111110111000001110111111101110111011111111101110111011110100001000100010101000111111111110000000000000111111111111110101001100101110110011001011101111011101110100000010111011110100010001001001101000101110111110100000100011111111111010010000000000000001000001000000010110000000000000000100011100001001000000000000100001111000000100010000000000110011001010000010000001111111100000011001100111001000000000000001100010010001000101010001000100100100011010000001101010110001000111000001111111011100000000011111111111101001000111000100010001100100100010001000100110000000000000001101111111111101111010010001010011001010000110111101111010100000011001100100101010000110011101011010000000000010000000100000000101000100000000000000100001001101000101001000010001000000010000000001000000000011110000111111100010111100010001000101011110000000000001111000011111010111100000000011110000111100100010000000000011000000000001000111011101111001000100001000011101110000010001000110010010001111100101100000000000001011111111011100010100010011110010010001000001111000000110111100000000111100000000000010001000000001110101111101010001110011010011001000100001100110100010111111111111110000011001001000110101010000000011111100101110111011110100010111000000000000100000000000000100111000000000000001011011011110100000001000101010000000000001000100010000000000000010011110101010010110000000111111111001000010001000000010010001001000100010010010111000010000000100010001010000011011101000100110000101011001101101111110010000011110111000100000000000010001000100100010010010101011100010000000010100000000110111010000010001001110111011101011000100100011010011000010100110011001100101010001100101101011010000000000000100011111011101110101110010000000000001000100000001000000000000001110010000000000000010000100000000000000110001000001101110000000000000001000010000111111110000000100000001001001000110011010000110010001000100100000000001111100000111100000000000010111111111111111011000001111111011101000010001000010000000100110111110011110010010100000000001000001111000011101110111100000000111111111110011100010010010001011001100101010000000011111111001000110010001000111010111011100000000000000101111111000111011010100001111111100000000000000101001000000000000001000100000000000001111100000001000000010010000000001111001000100000000000000001001000100010001101000110101010000110000110011010001000001100010001000100101101010101001110100000110000000000000001111111111011010001111111111111110100110110111111111111110101000000001111000000000000111110000001100111100000100000000111111111110001000100100010100111000100101010000001000001111000100100011001010000010000000100000000000001000100001111001100111011000000001111000011110000111100001111000011110000000000001001000000000111100000000111100000000000000101001000010000000100010000111100000000000001000010001000110010001000110010000100010001111101111111111110101010110000100010001101000110101011011010011100000000111111111110101100100001000011111111111110000000000000010000010001000000000000100010001111010111110111100000000111111101110010000010010010000110010011010000101000000100010000100010001100110100110111110001000000000000011111111101011111100000000111100000000000000010011110000000001111000000000000100010000000000000111110111011110000010000110000000000000110001000100000001000100010110000000000000101101111111110000000100000000001000100010011100011011111010000000000111111111101111111110001000011110001000000000000011111100010000000000000010100010001000000000000111111110111001000001000100110100001000010110100001000001000100100001000100011100111010001111111110001000000001111111001110011000100100000000000000101111000000000000001101111111100000000000001000110100000000000000111111101111100000000111100110000000000100001000000000000000010001111100000000000010010001000100100110101100000000000011110111111111011110011000000111100010000000000000110001000000000000001001111000100000000000000101111001110001000100011010000100001000101011000010000000000001000010001011111101011000011011100110000001111101101110001001000010000000000000101110000011100000000000000010000010000111100000000111100000000000101010000000000001010101010000000000000001001111100000000000000111000100000000000000111111100010001000110010101000000000000100011111001101001011111011110100000000000000001110100000000000001000000000000011111100001111111010110010000000010011001100010001000110101111011110000000000100010011101001101001100111110111111101110101100000000000000101001100110101010110011110000000000000010000100000000000000101010000000000000001011111111000000000001000000000000011000111000000000000000011011110000000011001111000000000000100010000000000000010000010001000110010011110111111000010110000000000110000001111111111000000010000111100011111000111110001000011110001000000000101111100010001010000111110101101000000000000010100000100010001100000100010100110001000101001110111111111101110110111110111111100100000100010000000000000010000110100010110001110000000000000010000100000000000010010000000000000010111111110000000011110010000000010010001000000000000010001000000000000000010000111111110000000000000110001000100010110111010011001110000000000001000100010110100010000000001000100001111000000001111000000010010000100010000000000010000111111101110101100010000000000101110000100010000000001000100001000100100111100000000101101110111011101100010001000000000000001000001000000110101100010010000000000000100001000000000000001010001001111110000000000010000000000000100001000000000000000011011111111110000000100000001000100011100000001110001000000000000011111000000000001000000000000000100111110000000000000101111101110111011100000000000010001001100000001000100000000010001000100101111111111110111101011110011101000000010000000000000011100110011010110001001110000000000000010001000000000000000101111111111000000001111000100000000000000001110111110000000000010001000110010000001000001000100000001111100000000000000011001111000000000000111111011101110111000000000000010001000010000000000000110100011110101111000010111011011100100100001011101100000000000000011000100000001001100000000000000110000100000000000001011110000000000001111100001111000000000000000001001101111111100010000000000000110100000000000100010000010000000000000010111110001000000000000011000100000001000000110000000000000010111110000000000000110001111011111110111000001011010001000100101110001000000000001000000000000000110111110000000000000110001000100000000000000101111100000000000000000100101111100010001000101111010000000000000001000111111001111111100000000000100000000000001011111011101111000000000000000110010000100000000001000010100101100000001111011111110111111100111011100010000000000000010000010000111100000000000000010000001000000000000010111100000000000000100000100010000000000001000100000000000000000100011111111110000000100001000101100000000000001011110001000000000000111111100110011111101110000010000000000000110011111010110010000000000000011010000000000000101001000101101111101000000101111111010111011010011111110000000000000000100111100000000000000010100010000000000000100001000000000000001001111000000000000000001010001111000000000000010000100001100110000000100111100111111000011110000000011101101110111011000100011111110100001011110110110000000000000010001000001000000000100110111111110111011110000000111101011101100100000000000000011100010000000000001011010010000000000000010000010000000000000101111000000000000111111111000000000000011111100000000000000000101010010011100100000000011111000000011111000100001100110110111101111111110001111000001101110100000000000000110000101100011001100101101001000000011000000001101101110110111000100000000000000001001111110000000000000110001000000000000001100001000000000000000001010110001111000000000111111101101111100000000000010111110100110100000000001111111100001101101100000000111000000000000001100011001110111011101111111111111101000001101110010111011000111110000000000000011111110000000000001001000000000000000110000100000000000000000111000111100011110111000010011101111111111000011110000001111011111000000000001000101000001001110111110101100000000000001101000110110111010010000011110011111111100111110110110111001000000000000000010010001000000010000001000010000000000000010111110000000000000001011111100000000000000000101011010011100100000100001111000000000001000000001101001111010000111100010000111111000000111100000000000000100000110100111110100110101000111010000000111111111011101000001000000000000000110000010000000000110001000000000000001010001000000000000000100100010000000000000000010101000010001010100000000000100010000000011110001010000010100000010110000000000001111111001101000111101011110000000000000001010000110101011111101111111101110111111110111011101000001000000000000000110101000101100111000000000000000000100110001000000000000000001001110001000100010100100111000010001000000001111000100000000000010100000000001111111111001101000000001101101110110000000000000100001011101111110111111101110000011110111010000100000111100001111000000000000011111100000000000010001000000010000001101011000101000000000000000000111100000100010000000100011111000000000000011111100001100000000000000100010011110100111111000000000011000011011011000000000000011010001110111111111010011101101110100000000001001000000000000001111111000100001111000000000001000001000101000000001111000000000000001000001000000000000000110100010000000000000000010000100010000000000000011000110000000000000101110111110110100000011111111000000110100111111110000110000111110000000001001000000000000100010001000110111011101000001111100000000000000010011111111100000000000010001000000000000100010001100010011100000100000000000001000010000000000000000100001111000000000000000011010000100000000000100000000000000110001000100010110110000000000001111100000000111011111111110011010000001100010000000111110000111011101011111000100001000000000000000100011110000000000000011111111111000000000000111110000111100001111001000000000000000001000100010000000000001111100000000000001000010000000000000000101010001000000010001000000000000001110001000100010100010001001001110000000000000010010000011100000000001111000011000111111100001111000001001101101110111011100010000000000000111111000000000000000110011110000000000001111111110001000000000000100100101100000010000000000000011011110000000000000011000010001000100100111100000000000001000011111000000000000000100000010000000000000010000010000000000000001001000100010001100000000000001100110011011100000000000010001000011101111110100010100000000000000010110100110011000000000011010010110111000111110000000000000000101001111000000000000001000001000100100000001011110000000000000001001000100000000000000010000001111100000000000000001101000010000000000000011000010001000110011001101101111000000000000010111010110000010011110000000000111101110000000000001100000001010011111110000000011111000111110000000000000000100001111000000000000011000101010101000000000000100010000000000000010100010001000000010000000000000001101111100000000000000001000100010000000000000001011000100010000000000010011001100111011100010000000000010000000011101110111111001111110111011101010000011010000110011111110111101110010111100010001000000000000011111100000000000000010011111000000000000111110001000000010010010100100011000000000000000100000011111000000000000000010000000100001111000000000000000100100010000000100000000000000111000100000000000001000010000000000010000000000010100001101101111010100000000000001000010000000011111101000000110000000000000100011001100110101011111001110010111100000000000000011101111000000000000010111100000000000000100010101101000000100000010000000000000001010001000100001111000000000000000010001000100000000000000011000001000000000000010000100000000000011111000000000000100010000000000110010010001000100100110111111100000000000000101000100001111000000001101110111010101100000100001110111111110010000100000000000000100111100000000000000110001000100010100000000000001100010001111100000001000000011000100010011010001000000000000000101001100010001000101011110000000000000000101110001000000000000000010000000100100001000000000001000101000011011111110011010000000000000000101111101000000000000000010001001110000011101111111001000011000011110000000100000000000000001000100110000000100010000000000100010000000010011001000000001000000000000011111100000000000000101111100000000000000010000001000000000000000101000010000000000000010111110000000000000001001000100010100010001000111110111100000000000000110000100000000000001000110000000000001001100000011111111111000001100001111000000000000010000100000000000001011110000000111110000000000000011011110001000100000000000010010000000001111111000000000111100000000000000100000100000000000000001011100010000000000010000000000010001000000000000010111100000000000000011110100001110000001000000000000000100000010000000000110000000000001001111110000111011111111010100110000000000001000100010001100000001000000100000010101010101100100001000011110000000000001111111110010001000000000000100001000001100010001001000000000000000111010100000000000000101111100000000000000100000100000000000001000010000000000010001000000000000010000100010000000100000000000100000000000000010111111000000000001111100000101010001001010001000000000000011111000100000000000000100001111110000000011011101000101000000111011110111001101010001000000000000001100001000011110000000000000010000010000000000000110001000100011000000000000011111000100000000000000011101010000000000000010000100000111100000000000000011100001000000001111000000010000000000000011111110000000000000010101010001010101010101011010000100000100000000000000000101111111110000111100000000110000000000110100001111101110111110011001000001000000000000001000001001001100110000000100001000000001111000000000000001001111111100100001000000000000100010000000100000000000000010010101000000000000000010011000100010001010011000000010001100000001000000100000000000000110010001000101000000000000001011111000000000000010010101010101111010000000100000000000001000010000000100010000000011110000000011011101110110011110111001111111011100100010100000000000001011111111000000001110000000000010000000001110111011101000000000000011000100010000001000000000000100010001100000000000000101111100000000000001100110001000000000000010111100000000000001000010000000000000100010000000000000011001000000000001001000011001100000010000000110010000000000000000101100100010001011110000000000000101100101101000100101000000000000001111111000100000011001100111110111010000110100001111111010100100000011110000000000000001101111011100001000000000000100111110000000100000111100010001000000000000011001000000000000000110100100000000000001000100010001000100000000000000100100000000000000001100000100000000000000011011111000000000000001011000011000101111000000000000000100100110000000000000100011110100001111001111101110001111110010000011011101111000001110000000000000000111100100000000000110000000000000110001000000000000000101010010000000100000000000000001010100010001000110000000100000000000010001000000000000001001111000000010000000000000011110000110101000010000000000001111100000000000111110000111111001111111100001101000000001101000000001101101111111100010111010000000011110000111000000000111100000000000000001000011111111000000000000000111011111010000100000000000000010001111000000000000000111000010000000100010001101000100000000000010001000010001000000001111000000000000011111100001000100000101110000000010001000011110000000000000101101110100111100000000001101000000110000001100011011111010101000010111010000000000001111000000000000000001010111110000111111111111100000000000011110000000000000001001100110000101010000000000000001111111111111111000000000000000001000100001111100001000100011111111000000000000011001100110000000000000010011010000000011010000001111101111111111010101010101011000000001111000011100000000000000000101101111000000000000111110000000000001001000000000000000011100001000100000000000000101111100000000000001100010000000000000000100000001000000000000001001111000010001000101011110000000011111111111110000000000000010111010000000000000010000111110111111110110010011110001000000000000011111000000000000000001101011110000000011100000000000000001100111111111111011000000000000010111100000000000000011010001000000000000001100001000000000000001000001000100000000100010001110111000010001000000000000000111011010000111011111010001101001111000000000000010111100000000000000001101011110000000000000001011111111110000111100000000000000111111111110000000000000001000111100010000000100000000000010001000000000000011000100010000000000000010100010000000000001100010101110111111110000000100000000000000101001100000000000000110111011111101010001001111000011110000000000000000111111111000000000000011001000000000000000100111100000000000000001111011110000000000001111111110000000000000011000010000000000001100111111110000000000000111111111000011010011000000000000111011101000000000000001001011111011110101001111111111111110000000100000000000001000010000000000100000000000000000101110001000011111111000000000000000010000111111110000000000000001101000100000000000000001000000010000000010001000111011100000000000010000000000111101110100001101000000000000000100010111110101000001111111100000000000000110111100000000000000001110000011111000011100000000000000001100111100000000000000001000011110000000000000001111000100000000000001010101110001100000001000111110011000000000000000110011101011111001100011000000000000000100111110000111011100000000000000010000100000000000000001111000100000000000010001000000100000000000000000111111111111100000000000100000000000000010011111000000000000010111111110000000011111111000000000000111010000000000110000000000000001000111010110111001100111111000000000000010111100000000000000100110111010000000000000101101111111111111111010000000000001000100000000000000100001000000000000001100010000000000000001110000100000000000000101111000000000000000100001000000000000000010011111111100000000000000101111111110000000000000111110000000001111000000000000100110000001111010000000011010000000000000011110111011101110111001111101110000100000000000001111110000000000001000111110001000000000000000100011110000111100000000000000101110100011110000000000000001001111000011100000000000000010000010000000100000000000010010000000001110111011011101000000000000001000001111000000000001000000000000000001001000100000011010001110111000000000000000100110100000000000000010111101101110110000000000001000100000000000000110111111111111101000000111100000000000000100111101000100010011111111111110100000000100001111000011110000000011011110111000001111000000000000010001000000000000001011111111000000000000001000010000100011101000000010000000000001000100010000000100000000000100001110000000100000000000000000100000110010101110000000011010011000000000000100110011000000111101000000000000000101000110000000111110000111100000001000000000000000110111110000000011101110111001011111110000000001111000011111111111101100000000110111010010111100000000111111100000000000000101000000000000000001010010000000000000000101000010000000100010001100000000000000001000000100110011001101111011100011000000000000001001101000000001101000000000000000100011101110111011111011011100011001100000000000000110000100000000000000011001111000000000000001111110000000001111111011011101111000000000000010001001000000000000000010100110000000000000000101111110000000000000000100001110111000010110010101111110000000000011000000001101110111011000000000000000110000111011111111110111001100010000000000000001000111100000000000000010001111111111110110000000011111111111101100001111000011101111111111101110110101011111000011110000000000000011100100010000000000001000000000000000010010111000000000000001000100000000011101110111010000000111100101010100001110111000000000001100110000000000000001111101110111011111111110101101110000000100000000000000011011111000000000000001011111000000000000000101111101111000011100101010111111111101000000000000001000100000000000001001000100000000000000000100100001000000000000001011110111000000000111100001111110111010101010101111110000000000000000010111010000001011011100110001000100000000111100000000000000010100001000000000000111111111111101100000000000011111111111110110000000011110000000011111111111011101101110111110000111000000000000100011111000000000000100101110000011110000000000000000100110001000000000000010000100010000000000000110101010101011100100000000000000001011100111111111100111011101000000001000100000000000100000000000000111111100000001000100000000000000001000100010000111111110000001000000011000100000010000010010001000100000000000010010000000000000000100011110000000000000010100010000000000000010011110000000011111111000000000000001011111000101110000000000001001100000000000000001011011111110101101101111000000000000001111111111100000000000100010001100000000000000001011111110000001100000000000001010010001000000000000010001000000000000000101000111111111111110000000000000011011110000000100000000000000010001111000011100011001100111011100000000000100010000001100000000000000001000011010011000000010000111111011111011100100001000000001111000000000000000001000001111000000000100010111101111000000000000100010001000000000001000000000010000100010000000000100001000111100001000000000001000000000000100010000000000001000100010000000000000010011111111111111110111100000000111100000010111011110000000100010000000011010000000000000001111001100000000000011111111011111100100000000001000100000000000000001010011110000000000000110001000000000000011111100000000000000110000100000010000000000000011111100000000111011110001000000010001000101000000000000000011001111000100001111111100001111000000000000010111100100010010011100000000000000000101100011000000010000111111111111010011100100000000100010000000000000000100111111111100001111111111110100000000000000111111000000000000010000100100001000000000000010000100010000000000001000100000000001000010000000000010001000101000000000000000011011111000000000000111110000000000010001000000101111001001101110000000010000111111010000000000000000100111111000000000000111111111011001010000000000001111100000000000000010101111000000010000000000000101111000100000000000000010010001000000000000001000001000000000000111101010000100010000000000000010011101111000000000001001000010001000000000000000111111110000000000000010000100011001001111110000000000001111100000011000000000000000111100110001000000010001000000000000011001101111111000000010000000000000001001111100000000000001100010001000101011110000000000000000100000011000100000001101000010000111100000000000100000000000000101111111110000000000000000101110010001100111110000000001111111100000000110100000000000000011111101000100000000000000101111010110111011100000000111100000000000000001000100010000000000000111111111100010000000000001111100000000000000100111100000000000010001000000001111000000000000000100000010000000000000000101010001000000000000100110010010111110000000100001111000000000000100111101000000000000000110011011100000000000000010000100000000000001111001011001111110000000000000001100000100000000000001111110000000000000000100001111100000000000001111110000000011110000000000000000111111111000000000010001100100111111011111111110111010011000000000011000000000000000111000110000111100010000000100010011010010111011101101001110001000111110000000000000001000000100010000000000000001011111100000000000000010111001100111001111000000000000011111100000000000000001101100010001000000010001000000111110111000110000000000110011000011010000001100000000000000011000011001111001100111100000001000011111101000000000000101000011111100010001000000000000000111000010000000000000000100000001000000000000010101011000000000000000010011110000000000000000110110011001100010000001100110101111011110001000000001101110100001101001111010000000000000000100111111110100000000000011011101110111010000010000000000011111000000000000000110000010001111100000000000001100010000000000000100001000000010000111101010000001100000000001000000000000000100111100000000000010010000000000000000011100001100110111111011110000001100000000000001000110000000000000001101110100000000000011101111111110000000000000110011101111010000100100000000000001100010000000000001111100000000000000010100001000000010001000000000000011111100000000000100010001101010000100010010000001000000000000000100111100001000100001100000000000000000111010001000011100001000000000011000000000000111010000110111010000000000000001010001100000000000011101110111010100000000000001110111010000110100000100110100010000000000000001001000100001111000000000000000110000010001000000010000000100000000001100010000000100000000000000010100001000100000000000100100001111100000000000000001010101101111000100000001001100000000000000001000000110011001101000000000000001100110000000000000111101000000000000000101100010000000100010000000000010000000000000010111110000000100010000000100010001100000000000000100000100000000000000100111100000000000000110001000011111111100000000000011111000111110000000000000000100010011001101110000000000001000100000000000000011111101000000110011010000000011000000000000001101111000011010000000000000000110000001000100000001000000000000100010000000100000000000001010011001100110010000000000000111110000000000000001001000100000000000001000010010000000011111000000000000001110001000000000001000000000000100010001110111110000000000000000101000011001100010001000000000000000101000110000001100000000000000010000001000000000000000111000010000000000000100001000100000000000001100010000000000000111111000000000000000010011111111110000000000000100001001000100010010000100010000000000001010101010101111110001000000000000010110100000000000000011011101001111001111000011011101000000000000010110100000000000001011110011000011100100000000001111000000000000001000001000100000000000011111000000000000100010000000000000110001000000000000100010001000000000010001100000000000010011000000000000000011011000100000000000000011000101010110001111000000000000111110000001100000011110100000000000000010111101110100110000110100111101000000000000010001111010011000000000000100110000101110111011101111110000000010000000000001001000100010010000000000000001100010000000000000001000001001100100010000101001001000100000000000000001010100100010000011010000000000000001010000100000010000000001110001001010101101000010000000000000000101100011110111010011110100000000000001011010000000000000001000010001110000000000001111100010010000000000000000010000001100110011010000100011110000000000000000010001000100001111000000000000010001000110000000000001111000000000000010010000000000011010000110010001000000000000011000100010001111000000000000000101001100000000000000011011101000000110000000000000001011001100000011000000111110111000000010000100010001010001100010000000000000101111000000000000000100100101111111100000000000000001011100010001000110000000000000110001000100110011001101000010000000000000001001100110011001111000000000000000100001000011010000001100000011000000000000000100011010000000000000100011000011010000001111010000000000001110111010000001100001111001100000011111011101110010000100000000000000101000100000000111100000000000000011110010000000000000000010001111111110001000000000000000010000000100000000111100000000100110011100000000000000010111100010000110100110000000011011101000000000000000100100110001000100011000000001101001100000000000000101001100000000000000100111011101110101110000000000000011111111111000000000000001101110111111100000000000001111111111110000000000000001111101000000110000000000000010100100000000000010000000000000010100010000000000100000000011100000001000010001001000000001000100001010101010011101000000000000100010011000011010000111111110000000000000001011110100010000000000111011000000000011000000110000000000000001011111111101110111111110000000000000010000010000000000000010111110000100010000101110011110000000000000010000110000000000000101100110010011001')"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"encoded"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[(np.uint8(2), 1),\n",
|
|
" (np.uint8(0), 4),\n",
|
|
" (np.uint8(2), 1),\n",
|
|
" (np.uint8(0), 7),\n",
|
|
" (np.uint8(2), 1),\n",
|
|
" (np.uint8(0), 10),\n",
|
|
" (np.uint8(14), 1),\n",
|
|
" (np.uint8(0), 1),\n",
|
|
" (np.uint8(2), 1),\n",
|
|
" (np.uint8(0), 6)]"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"run_data[:10]"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|