diff --git a/README.md b/README.md index 7c3eb2c..1dbcb4d 100644 --- a/README.md +++ b/README.md @@ -65,26 +65,26 @@ def user_computation(s: State, data: list[torch.Tensor]) -> torch.Tensor: Aside from the ZKStats operations, you can also use PyTorch functions like (`torch.abs`, `torch.max`, ...etc). -**Caveats**: Not all PyTorch functions are supported. For example, filtering data from a list by `X[X > 0]` is not supported because the zk circuit needs to be of a predetermined size, hence we cannot arbitrarily reshape our X into a new shape based on the filter condition inside the circuit. - TODO: We should have a list for all supported PyTorch functions. +**Caveats**: Not all PyTorch functions are supported. For example, filtering data from a list by `X[X > 0]` is not supported because the zk circuit needs to be of a predetermined size, hence we cannot arbitrarily reshape our X into a new shape based on the filter condition inside the circuit. To filter data based on condition, we can use s.where as follows. + #### Data Filtering -Since we cannot filter data into any arbitrary shape using just condition + index (e.g. `X[X > 0]`), we need to filter data while still preserving the shape. We use condition + `torch.where` instead. +Although we cannot filter data into any arbitrary shape using just condition + index (e.g. `X[X > 0]`), we implemented State.where operation that allows users to filter data by their own choice of condition as follows. ```python def user_computation(s: State, data: list[torch.Tensor]) -> torch.Tensor: # Compute the mean of the absolute values x = data[0] - condition = x > 20 - # Filter out data that is greater than 20. For the data that is greater than 20, we will use 0.0 - fil_X = torch.where(condition=condition, input=x, other=0.0) - return s.mean(fil_X) + # Here condition can be chained as shown below, and can have many variables if we have more than just x: e.g. filter = torch.logical_and(x>20, y<2) in case of regression for example. + filter = torch.logical_and(x > 20, x<50) + # call our where function + filtered_x = s.where(filter, x) + # Then, can use the stats operation as usual + return s.mean(filtered_x) ``` -**Caveats**: Currently, this 'where' operation still doesn't work correctly, since we cannot just plug fil_X into our current s.mean() due to incompatible shape of fil_X and X in reality, we will update the compatible implementation of how to do data filtering soon. Keep posted! - ### Proof Generation and Verification The flow between data providers and users is as follows: @@ -204,6 +204,7 @@ See our jupyter notebook for [examples](./examples/). ## Benchmarks See our jupyter notebook for [benchmarks](./benchmark/). +TODO: clean benchmark ## Note diff --git a/examples/computation/computation.ipynb b/examples/computation/computation.ipynb index 7224c50..96601ff 100644 --- a/examples/computation/computation.ipynb +++ b/examples/computation/computation.ipynb @@ -2,58 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -130,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -161,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -172,10 +121,6 @@ " return state.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n", "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_43530/4262130413.py:7: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " return state.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", "\n", "\n", " <------------- Numerical Fidelity Report (input_scale: 2, param_scale: 2, scale_input_multiplier: 10) ------------->\n", @@ -195,7 +140,7 @@ "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-192,338],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":2624,\"total_assignments\":302,\"total_const_size\":46,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2,2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[2624,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450403352}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-192,338],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":2624,\"total_assignments\":302,\"total_const_size\":46,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2,2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[2624,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709716989569}\n" ] } ], @@ -228,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -236,14 +181,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 0.45028138160705566 seconds\n", + "Time setup: 0.5198168754577637 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 12.75\n", "==== Generating Proof ====\n", - "proof: {'instances': [['43aef79b2c02e756f80f1c9c237be69f1b7497caef637e58f03450a15b654b21', 'f1a01cfac5286cb0b9c26b8dcd3e1437756456e3e433a5571d64d0781222490e', '0100000000000000000000000000000000000000000000000000000000000000', '3300000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2c1a90d0c1cad26bbf06847e40f7d806f74630aac569cdf49ac990cfdf2e976d17c3b61ba6db3e2c40845d3dc9c802d300d079031cab38e49a7be7d7dae7b0be1d5113f5ad3b6e339b76f3a6844651853f7df28acd053d1871609e6aac4e603916eca9ffe1b8fe0e1be093737236a333e8e8e719db87a16648b7b806556bc1052fac3d927d5c7d3d883d8f45aa31724be2c1fb34822d82b236dfb7c831c479220132f381eeff7b747831fe2eae3a74c9fee5af6ff669297d1e09672e406c64360f71f25f53c0f24bdd2e74308925f1545350d122a8f396da0ab422694ae948012fb1d9040ec7856b913396b176d86284de29a783d65c6608b9f49bdb17aa5ed91d7e6e0c70e71972dd4c525d196acd247f669a77605c0cb7c40f762a1eca3f0823370021951ba5ed15ac0ee2e5ccfa4f425e0502c7fc0a848ff3766e292bdf411e6f04d3b455305bf0284af3ed169cc60439ed412b5dd643768c7835b0fd07850d42addafbbbd1ae4ecc7b37ae2b74e50967c4c3da68e816416b262f2c76e2052e1799e9690c7dafacbd01f7f03bf0e24bd168e2a929b8ba8e71a6ec9f833aab1e97d6340a5781a50eb29c2dd11bac1a30d029d0f3474785cdf18d0d7bf0dae40ae476746980d31332ac069ce06d14cf8fb86eaa45d04c7ad1f2d6ebbeaf8e9f09ea37e845a0cd57cedfbf0a8e225bb01da278a27923d3c5c45499f5dd6aacdc1849413753eaf4c2319c84c7e1c2b8b2199b9b57caad98387625ea0333952e50299fb462db83f80599606ed472d88225f49e8eeb0dd6dab3dd355eae4012ae6a258eea4cf7fd383761a59e76476f76e7f45f10974f6dab6dcff8e5f88b6bc601145dd98a4daa98b6e63e2ff4f4e49f1f6d6520cecb2fe15371715a88d8c6cb411efd10dd473ec1c1c12485cbd68fa4ea35d315914d0d08c3b72c7f13f2ad6b9b218503b34403e6d7715028d550e9da9982c33a4de075483528dbb227c0daa8372fa2cc294a8306c5c188c20b442ce9285c13c87ba3f015e2371c421867d470c30b9dddab1a4742c66561b0082040e8e8d024ca98de0ca0d5449354375653909a0de60e1efe0b7e1c0aab3aaf0b2bbd82e3550364a98bebf0526ddb70d5ff847c1a09c68f401dc22582349965424f79671728f507cc8272170deed3e0f85b0c9f053aa05ca70b44af10da718c06dd8a288131934b9822c14d6e78537fd929a563199dbf8a35a7d2d32bd2a9052e0c46619dfb1a71e0439773deadb490f4f410fc2280148dd0096e23e8befa2de046d0187c6aa9e0d2465310c3e397a51337f34627f69d836a8ad7de749981a841282f25e99ef6034ae6711fc455a5ef59dffc403006f3d032a17e79389e565818129f5d2d82b8f2b197af9c3ba20d5ef8a39fc5268c4fd067ae704bfca1e6b5a6710388374c9003410150cee623930f53dda0692c2c85a2fb4bf0f1d1f62f9f1bce83410d361af0e3db4fc14a2d8e21218f6a942b441169a2cdc3303a5ea54b81b0e6a0e2b342a6db8f22d79f71f4113f331e99249fdb00a37817741de26cf2abae3b42b1038d7c2ceb1030bc7a30e19e28ac0c09063af2f52a752ee7ccf395ba8be6097fbc02504a3893c6974c15d299605c7b1bf432d7aff9012792fd208f4fe6b70e0396c8b0d93e845e12cd22fe223ce3db200c71649858d7350076f7a1e5559a4f1b10c749a07daacbc4a41bfeee259a52037c480efb07f842127c20128e339fa6496c07698af0e1cfdd942feb6cc705550efd161340d546946233343f5ef3e35958ccee7ac811ba55021ea39c59f52c0306aa756134a43361576c0bb751772ea2e5d6b8f7e48aad3ef6c2f1b280e88ec6151483b8cd22afda1e4578718b57617af1dbdf53e26444c99e13d948f0eb768902fe748d5cda9d8d8e995a2de9f73b235c609878743ec15ce215fb90ec2629872e9da3e7fbce38cbb771ccc0e12588af35469d479ff511ead55fa473f1dbc01f149e0022ae8e945e3fa816fe7589f456edb7427a9a08406d3a52b1056da2ec600ded185fb4bd115108e03296a1b011ec6a31459aef42e49fd4927f8c5ca76f5726af7bc7e8abe57afd335b6841d73776325575d4051efdc6ebce3a242f85ca12016b57c0bf5e4f7ccc17a92208500c30f7659ee6f8404992a9e17436cd2903472be9f519fa9b0f207730c1b65d952a77f1df4e5a15478bf43cc0a8c8f8c857a22f3d428ad7cdd2bf4a95e7714eeb394d49ca5d0bd5fae1900ee5297500cfc6fb2905f4b3efeee2e31734a3997e6dba918f4aaf78dac258f422f16a39c8a0cdee164adfc127bf7b4dfdd6a1f42bda3ead5ffa819034e842445754ea119648a50f2555be65405dfa7e2c879ba7f722b27b1a2d9dd24aaaabec74bac2a09a9eeb2d078e9ec3f794c2d8373d2992dde6d4971f3691fe5ed6c0bf4c37c9c97809ef8c2305171d264d43c904efae36b215a898e39161ecec8cd9a28f3514e041413100105628503b766d51945659970f7f1984e3e2fd8e21aeb4c44941b7a72bd060b32dd2666798d7bef868ff4c94fd60336841124e65487839d2f8b4a370375ed9860ab684f6be02156a64588315c911f997e116102e315badd5ddbcf59a53f853c52da1dfecc3a0d92e71f2cd2e6090cde3ea8de35a2d42dab478884a6dd0297e942f5cef1c885b2c7ffd088709ee2d22fdc14904e8cc658e8a7fe1f031426ada6e29ace11853e9e19a7af5cb76b9c7c13dac7c79c0cbf6ef1d34e0e39861753bad29c82ed3e6bc156be56ea10640e4d5159be2746f77b7479c5bd4cc4eb7f7ab7f06ae5b3a5be55c7257f6bd4fe5ae47a13229b49cfa07e6e9244d6dee414a51b10062016109ef36b62edaeea6a1a8559250c553b6eb4fc39d045d8b88933e6c38221669105bbdb62d29cca4c5ed2ca7ce81c0b51709981495864c66de401418890d9316d97c47da13f31f233515388308cef0ecc6690c2173325d71b14288fb6323fd2bae3e78ebe463b04830faf4a72ee28f16db3aa87173c06151e02054325c0f7f8bbb3a340f791697cfccb4e70957b6c3f200c80b244dc680e237f09ae508000000000000000000000000000000000000000000000000000000000000000029effe59b9e9cbdd22bcf9ac346b87192415de686a8baca1f30889258147af9a00000000000000000000000000000000000000000000000000000000000000000b16e15505fc9351ec710658d070dc6830ff596d8f5a67e3f203ff0c4305826c0a004bf66dd17f2ce46d8029e62d00fd4f8c8d7121e037da334b947595fd1bbf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e37c89afca8d3c9cdad398e1f574800109d2ef7b2576db5788cdc9c410b20de14a81b6aecc7f75833b27d7b9ab6ea1806ef1ba66062baf00d6055c5e190503c00000000000000000000000000000000000000000000000000000000000000002cd5da48760f3cbaa3b61f252b672e12caa8aac31e00be3dd59d7b305ab9417e12f69923b8ba53add5c25b29cb6998cc582f242dac00644f5ac17cd1c800a90900000000000000000000000000000000000000000000000000000000000000001753438a7f04cd214cd48d3b045285da6d16485316e8c635da38619cbdf2df3d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227280c8596a9a421d4751fd8c5978c3c3e061294cd78bfb0f355f3cf1042da614d24d8614db7efb69df41e024905219b17ecc6f34d4184bd7205a4bd547e8be2a12cb3fc2df769427d65e0559d1b9aaeff510d5a63b0df43bffad706d7c0d6d01c886fe9ddaea3a40aaf926fbb92f8dbd7507b18c32718d7ab6cadbc10765c80be5dd45662d8513408a7ab827307ab7216c9b12623b26ee8d8d0913caf9d21b1877d3c612b6d4eb327644cefe443a87dc8f05f70a0ef745a4975d7fa766ab8422993a879111e496b91031bdb8cf1ae10f703163adb4a5e813e61f5b35f06af42ad767a8cc4cc41da6269dd9bce678ec8f888382e92a5b32c53ab9a80026f379202f060afe6b3e56dc9d2a9b66da9a2320ee564cff1b561c4cfd2577640995432f63654a8513aed05aab2216b350661bda71f699588c4a5e4b65ef6d087f8cd71f57114313a350d8b5459b60c8b9dc66325a8b5118504add646dcc39ce67eb912e43bbfa21cd73e3fc62a38e14fe0e38078bdc5001576ad6f827fefc88c877b52f64d05c5f1f61f9f543bdfb35e4e9400560d8fb72e666af39b9e0d7fc4a35e806ca1569fc2545716e1a8f6ed1fe4b4f58ec981b63b3fcb226679f34b4f0f35f1ca0cc4b436d301846315e465acae8ec27b6925557d8c3ef0906d1f4075c66a61a6f3ee5bef2644d64373a0338cd1a3774bd484bdaf2be508c2ad56be2e98c1c2b678a4daa80ff664508f291ae4a39ad0c87c432a9043353bd9bcdfe360a9b8600825cc250e246fe1b35b987069b90673e076e40cbad9209f6ee26d27af4aaf3273947ddf3ae4dbbf225db54bd0fcd4ebc8e1b798d86844789d5dfcc520e81ce2d1dbb5f65bb15569ca8e0890525c42915fef3d3ad45139212c4da4a5b4bb6e712a286062114142af71407e172eaf0f101e6579cbfac65fa619918d52e355d7827b9d9648fff2e29586fcd7bdfbb35ec6d624127e5de7886a9c3028cf3942e71112d7830b97eec129cd644bea8943166a497825fe15907c37c00992fb95c691d2c99ce42fd97dcdefa970bbe2bfd49d22b91a007a9d92292329e3d5e47f966aa05fc1f73444744037535f2a2c8ccf74a2ff0e3a06a904d21c953f2a2bcb3cd2401239265faeda6881ff905d9b9fbd4b43a87884f13013e162cfedf62bc728999055f81a7aec7e576c050657a1daa59ca2b553ad7f1b7c7a0c97e14cbd100fd6f17d2b786e4ffd3ded24c318bdf519c77332d0777fc0c3f216f90d63d3af46caa1e35af92f3ff84ad6ebc7c0efcbc934a7f635594381d549a8a465aeebc0ae05d1b1c30930d14513ddaba79783bff354e6123baa8799f22f59f47cf2e9bef15740abf6f55c92909a0c205ca1049d86c3c7a4f54c6a5058ee7b1021f218bc967d72a33c0f52db4ca95ca7d67ab050596bcecf3cde4e21fa1c30553bf4acadc346b2aad683443dc85c2419771dc94dff33c24885958b5a291b1f73315f824cf5a2a1ce3af04723d5de0f00e0464f9bb81b05edf1cc3a2ef85c6b77dae8eb0a11d4804ce13ffb445a00b315cf8c1ec558edf0583ed1850c069dd7a2b88bacdd4bfee', 'transcript_type': 'EVM'}\n", - "Time gen prf: 0.4699513912200928 seconds\n" + "proof: {'instances': [['43aef79b2c02e756f80f1c9c237be69f1b7497caef637e58f03450a15b654b21', 'f1a01cfac5286cb0b9c26b8dcd3e1437756456e3e433a5571d64d0781222490e', '0100000000000000000000000000000000000000000000000000000000000000', '3300000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x081f2a0501485015fada18bbb096db4da4f3ea3d6a29950430f8d1f6fee35d480406c378fb8e06a82f16c5cf3b5ca24a304a2404e271363d7198cc388ada8e0002d4dc4ff29d0c6cda19ca810e7076a980be75b83653d76d3a2ab9120d3dfae91a3f3ef4bdc9c549bb4668fd230397900c3be05f783ebdc72433964a1400fcd3016650e44b11f6118d4e87add597093ff53bcba5cf5366c7ead251c8f2cf91c225a97e0c920da56e6d82b28f0fb63028b923a8042add06ff2871f4eda58452dc04a641e8906f0d5bc6e8f35842c40fb6ae23b1e527c9456514ceb0e65470b7921b2c874794b1131c34d87972e87ba6f11dfdb0ef2136d36abf199ec68642fed6125daea10793d30f2a72b55ba0e38a6efb265271ffbcbb625e9982e92fabbac500cb6f895e0d1a4a2928c6d73b16f7b459611c10aa104a3d865d72e47be74a091928d3ff81077091835b694feef50e0d3e1d934b569c28ed43afed7d9e5b3d5a19d71de80b35b27236d2f40ff48b74670f0469f13d98f606d6746283963c2b110f244785329ca1db5f417a794565b4af7ffad902566fd4aca2b7563eeafde3fe24ca99955033966ffa9147145a15262aca0fca89f43bd323da31b3c598db08d928484778b496e364107684625fc61fe36415732f65f838cfe122947a648f992c11fb54b01d8402a6e55056866c27432738e754d0927a886e7e17f3c248e117d02d529f06f6d11c9b68daf4f50311a885552dc90004804caf77f63f5d229447ac1ad01a953b1ea8a5ad959577b86e96429f6ca591a393ac94916fbaafdb7db5db258eea4cf7fd383761a59e76476f76e7f45f10974f6dab6dcff8e5f88b6bc601145dd98a4daa98b6e63e2ff4f4e49f1f6d6520cecb2fe15371715a88d8c6cb411efd10dd473ec1c1c12485cbd68fa4ea35d315914d0d08c3b72c7f13f2ad6b9b218503b34403e6d7715028d550e9da9982c33a4de075483528dbb227c0daa8370124869a249c1ee6f4a458b13f4e1073e454417b6643b78d323a27dbe604e0661c059e064563c7cfecc04fb7a9f287057c6d0ca550505e1987bd573d4c6bd46502362c8b31a40821ce96478dd45864cf46a9dda339fa50343d13727604ec0a0d199799fd2f158addd7c16a763fc14dfa10d3404ea0e8ada0c4adb7dbc5c51868175ae79975d388e721a237bcd99c14c43e00a5a34c3e05406595a6a9049a21be052bdb0b5a875ab765fe12485ff72c6e583829f6962ca7fe0875b259e6ad8b5b2ca259e586d3550a391a0822e9ee67d63f709c106420e47f567bfcd3a7cbb4ca2053b603c0ffa9c92eff5d145dc3f2737518b483ef6be8b4415f39df32d661b3119b96a67f805df18996d5d042af808d05f8f0f634d2f98db9033528bc68a61003edb7fd00c9de8d906894872ff7defdb68cd7914164bdd2969e70f3592b953f018c51facf61855d9a434a229ed3777b8598270a0d0c2442fd62d9f040495c8f069eca8e99d9896e42c7724ab6d8e76be56c11ddc9bf0e9e5faf666712c5df98193efb75635196864cfe6484c6767cccdc9b70fb4e59dd73663896cab623699621ee6a5c9a96ed36e3a461c0b0ab045eca3125518a7c958cff990b1555857aa70cffce7f9f5c9d1737a673883609f0074d31b0d50917c6dffb56054ba3c054ff0b1d361c779a40e1ecfd784799379cb39f84caeed885222766160f5b3b1e247e1a7ebe08ffcc06bdc901e6d83561a6f12568af37ad2c11a010da8fef8ecdedce10cb39484fb4e7b53ff88e47c511472480ec20355bb4d2cc43b5b85f312d183b2da5fc3c356d01604089b3592db1859f03fa16834468fac1934c5b13346675b1034802674a72e356fdc69684d71c67745dad51809dccae332347e860ae81cf86135400bbefac71e4c30685ea6d388ae600aa6f7f49bca4b7d886e170e9cbb0780e73226118af4bfb2da941166ff7baada5e7aa560421f0e7a212f62ba4cb83771d19b5589511d239ab6884818e4685c80418b2aa3c096d69baa2f7a16b951d7a193aad3fbfc7601ca583fe259a009f1cdb5afdf70076ffcbb95f5cd06af2191b01fad52f9e8fe5bdb4add402be629ec4f8f18ed7c889b806063d61da91378e4928487afaf1001526e85db6fce6e9599d88a3599adfcf12bee8ba630609f62a17066c7da9aa313f0d61c6a764620984b073b30e1e37ed95eaf70c38429f60ff0b259f1308166357b40c10e61004992890f148c674c79e6f47c7f66df8a67628e411649379a8b38f26f9d964ee34778a64d6a049ddccfdbf4d5e5c55348a473ba61d0689f6eb2c2b12aab6003f68dad36037e060c1ab737c268524eaaf9172d3020847047829fbd3f5b2c9c994f532beb3100cb67cea1023a4ff3edb503967d3b2217eb625a18fca85c09db1db8b430083cc4682c153f856710f745df53fd263921d8a6adafd7f19556707ea93637a9c28b0f44e2c99053be4d3533107a698ca5022ce12c4438711ae0ad933dc466a4edf0dfe31274124525eeb357b9db9637b331ca4e89c229a24be863dd4a9760cd6a0a52ba2376219222a5a41e0ce46de7a020b1161c720558d4ae49b762521e8f585f6e06424175e7b5e27e086d4b0e4ca8c0a690ca36edb12cc80bfcf5b5fbd8324df9067babaf0769b1ce8dd08b9f44dc408112c144b09befe9b7d698bdbd8429948ecaf04daff478ce30af6e65a5e189c0c2d1e4709ff9d8dbb8f4ea4455e7b8527c79fa0cf563bebb09f152044c79f75020266f585ebdd907b7e9aa1ec1825170952a4bb97cb10c145f6fcdc3b33cdce1be1c0abbea613ba2ecb93b77ec6560e6501c3ddf84abf57fffc7624dce1610b11371168be5838df636d4eed108e0f3acb7bed697dab1bce0aeb98b9ef5e1074089af07ec111834bf30e1ba2eb2d91f9608218d979b563ab2a4e185c4af7bb6000d0cd4c0882bc794cdf3ffe9b6912731117a8b66166fcaeefb9175e240eea812a914b66f2da12ca5ea6fd8052f2c97ac4ef13baa3d9df8478eace11f18177490d0b0b11e8ae8af67d1eaeadcb7279c7ac50c371d83b2c78ac758029633aef130000000000000000000000000000000000000000000000000000000000000000190c9b64d8767a861d61994b3fa4af5acbe7121bc0c92fd4d463f0bbb01b22440000000000000000000000000000000000000000000000000000000000000000267773efb5c92995c7c4eefd141d883523294a9e9240ba90ca5c67fb2ccb520a16d966ca7e6cc381da5cec1389d1c84454f888308f9bc9da1109b4eb7d46c7510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d8c3ca1bfc8e0242df06f66c557d61d5d12120c29ad9da42190a17f91a554e2dda6f5eda9e5cf51494bf7078d7ebe92ba4306e6ae6ae6b410e16f65119850f00000000000000000000000000000000000000000000000000000000000000002d58224fdd0a3f5b037187fbf0ce570c2b7d1ef6ea46334980d2237337bb631429a8f33723979fad52c9c58f58660e319fc409ad8bcbcdc0ed5ab885b0654c4a00000000000000000000000000000000000000000000000000000000000000000050edbded760fa77012c4108bc14d9378fc3c7d33dba219842f36716e3a55c2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017c4eb5ebfb82339ff768defe055339f396043d33cd31ea55da14000fcc059cc2e2d70b86564f150514a64e6d53f6052b6e97de56b9430319bf0d8eb1b10d51006a68218de4cbeb01cbc7206539006323c0e438d391b76ec7326a4fcda98665f0e1ff0f708e27798748f1caa0b3ad99f32f47d76deb267886647bb404c277f821471718558608f639f3c8ca2d62929a938a6fcc197ba5b6b910fc33ef3a7c2201ef65a0fde844efbd9008a93e304ee1e9071790682d150cc1e8426408de976432fa03e2e5a50e397d15e97050b384d44f6339f33ef4173632098edebb984f4532c5344952d27f4a69cba188b17cec2de43737de4234b08e49a4bedae27b4f50f0e4f028c4a8ae82c52d49162f860916888489b8af3b3d61f06e78bb1169ffd63188aa6aa2ebc92930f5ba8cbd71d2aa5a25cdb85b082a8fa6e121b46debdd99b0669071eeace9cc53b09688cd00c9e2a4fa7e3e56779788255c9d21e2eda9c55063ad581bdca81d36dd212b5a9b7566f5b6e95820577907e5e93531079ab47571e6783590292a50c405b3103c75b0be61d6a49296eba6f595845a6a064b0e356041a5259f2d6eadb66bb36d263d5d7f6db901139497f7bbd3420b60949894a3028fe033fb23c064e14a3239c15d28054b9509497d788b5beeb80e6fcc63eef272b6de3954cacc9106da60412d00c912480bf4ddd2196bff9a4eedf23b04a62e0299a45d0ea618b9190acacdeb06627ca3435356bbae38631d924113d1c6ea1ce11b016c1a230d65fc3dc98e14081647e3699fc2a8dde9e0e7214b4d9e73f690110a73989658d8f4778b4b642eee0bd1a1d26e1940b127e3196f46b78522fefbb0e60bbf5934ff647ee4a443d19004adad9e8071a5f3cbc80ea2d51c82a3c84fa204804f988739a81cba28474b45ee83c2f601c527bd573642307eaf242f5acca2db72823f2d435ec725f4875ea3ff8ed6c3b32a4a03cf296fcb17757d2d336e7239b5ee4f7f68327bad4e53b41839966fa2d34ef1e807430655ac3d889837b0a1c7c5392217db5e2bcd1a8f659a9b97b3e95abf63dcd27558e58e5ab719f870c2a69c073b19bbbc869fd8f75512806879fe0956b4864677a4e98e7e44c9e7fe1093f89aeab8b68bba9ad455d26a5a4c3cbcbbed775fce1f5e3386c891ad6fb8426b96153cf4682e853f2756deefa691ac6e14bc6edf47cd56eb8c784110dd9bf0f97149510f58190eef1349b0ab2294693bb960bbef590fed7ce4bb6dbacbfe31ff2ae4d398cc03a0653680cf40cd3f09e62bc3ab7e7d7dc06e96f1855cddcfc2de8bd11015483e67ed901082e56caeeb5b33d67765d38e9270aa1422f545a5d28d9e8fbe32c5713dc8c87fd9a386927f510e296054fc401116c37aaa6f842f52bea468ff3fe1bf293d54e51f96b1d1fe1c68a239f97e84bdc79b2f58beede212de3b3053142aed20fbdc027f25778ffb744c7e56fc75e6c7f519ce55bde6b2b0dfc1992afc08e020e1766a2d4bcd0caa19eb2578e822529fbd12190cfc58a711206778bbb7c70ce7587170627bedf2112fad3381321b626826a4c02669a21ca', 'transcript_type': 'EVM'}\n", + "Time gen prf: 0.4941589832305908 seconds\n" ] } ], @@ -260,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -269,7 +214,7 @@ "[12.75]" ] }, - "execution_count": 9, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } diff --git a/examples/correlation/correlation.ipynb b/examples/correlation/correlation.ipynb index 1678317..7002b35 100644 --- a/examples/correlation/correlation.ipynb +++ b/examples/correlation/correlation.ipynb @@ -1,67 +1,16 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "NOTE: Currently, the circuit is too huge, we would do it by requesting covariance and stdev and just calculate it on verifier side instead! Other circuits in this example can run well!" + "Note that it might make more sense to just request cov(x,y), std(x), std(y) and compute correlation on requester's end instead of requesting the whole HUGE circuit of correlation. " ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -89,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -130,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -142,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -153,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -173,9 +122,28 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -197,9 +165,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "==== Generate & Calibrate Setting ====\n", "scale: [5]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":1,\"lookup_range\":[-32398,7566],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":1250,\"total_const_size\":169,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-16,16]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450442648}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":1,\"lookup_range\":[-32360,32536],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":3710,\"total_const_size\":792,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-16,16]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709724514721}\n" ] } ], @@ -212,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -220,14 +187,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 6.017360210418701 seconds\n", + "Time setup: 6.577926874160767 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 0.71875\n", "==== Generating Proof ====\n", - "proof: {'instances': [['7469705c7b45875730aac31b009e8f9e9f9e57031bba148110877f78e4518c22', 'c1f946e3fd2b2229bfcc2dc9ff7f4dfc1fddad53635becb58d130bcae5504712', '0100000000000000000000000000000000000000000000000000000000000000', '1700000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x129fc9190be4bd89491477f1d610b0df57db6207db7622e3499b29b0526b7fde04ba713964b0f077421f98b36f8825b35bdf48aa966de7b13e525cb66435dcb51ff2fac415de8e4730b36682da9fa0fb4f6d7aea42d6931bbf9116554f9ea8f900019846562ac1c18a85a9d8520f2ee4ed1960b51a51e59cae1e439bc2c53a961bdf798b01322bc925a47a09944baee64ded964b88be194f7e12ea7af0fced5a11cd22e545c4ccb2e1359572e197c2c857f6b45899bfcb3aaaed6dca741126e9118e3b88e6bb3194e0e16dc54c9bb339f35f03fa65e735dc1a497b8794df2ac929901e945306c5739558e0e886a9b8cb31a020864b8bc1afee0e830abcb7c41028a0ffde9be513c56d711d9b824f96ddd544c2273707cc18b77728ba6301596a075f776c4267a98b167d42ddd9eb8498ff8b64123de0f1fafb8df078e72a4f101b0a93180a675ae142e107b20285447c77faed712b9368930a366af67028ee4820e218e8de0b0b2a336fae58bb1e9fe96772f21c42d000f5514161a58d0cd3c71098912ab6c2d03bca8add2cbe4e7db230cc0ec31dae50a7ceb3bc519f7a7bd7133c45c65521d0174f6acec0dc00c314b2e6300e609bf6041ff756a5e24f9339134e302b21bb0c617a1280fac108c659f992d66da1eac59b11ddb4ac9674381f2fdfed4ae4bee374d7a889bf331bb702b1550d8712e46945685520f6b6bd62f610b595d7b414cf4ce1da39fe372a485a40d5cb79bfc6dde0637de41bf72c8d8b113eba810c19b62eecb03df03929aabc735c4fb9c9014e8d313086141b5cb9c910923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4100ffa32aa6211a719c0c28ad02333ae95b3d63ce2bbe04407e525247ee90cbc018d8ae44bcd3e71627f46d0abdbf41bfbd887d15c1897354abab1142dc1d6cf210923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412aa0e646f9ab4bffe68eeebc96a43ee9ab3e0e6abc98cb5ccfbfe49171ee10da0dae56d9e4ae73683891bc49e1960571d56bac1a6366424950a66c8deb1ae4991fcc861afa31fbec96293bdcb453ef12cc823ce79ecdbbdcae553fdfce3217fe13b32d4290f8899d47e673ac6bb819c960106fb04f6180286960b2e160d1b12f2b0edc999ebd216b8b6fee53ea696228da7cd4de06249c9644114afdcb27933924c2896be5a287cc099e437c1129621edc726e4866d70d09b330e34c4281b9f60cb9d038d33db9bffd641db516b54b0ba81cfc05951b17b6b3ebcd3d3ed1649e2d225ff4b68e43c5d412c694ea8e3a654e9c738743ead709a89a56ab8e27d3771c72b8352df3ac10b7fa1e1851aef8473bcaf70d83e4059096aae43eca2d282e2747dbd913d9592d8583a0a99b7a73fe6f8d1a7538895b7fee0a161470528c040a2e1feb305acae60a56994162a03a6478f9d0581166ad2fa9106b880192b46428c30496f257e086c335ba31235ad9b3fb627d0e9f6f9f7d1fc76d950f9e7a050da0496460626a87bdba9ae27917509423e514a2d12fe976d6221aa8c420505a2a627d401645bb590aaa3890ce594499e27af314cd5ea8de3795a9260ce585e718a431b5e55402cf75f59f840dce188e222f0720ed5847812c0557bf70efa1b700f541ae441a5f2c4b69dad9f46d23a456c0ae08bfcbf48e8adb3a58d8fa79a82da2bf822d67d015ff22e6e9248f964ce432e00bb1cdf7aa6a0c3a352c8b554e1eca7e2d31cef42a64a0561986627d0ca6fecdeddd204360b54778164b1834b50e4be112b6b80eee6a914adce6c3f80e9f433de9a872db0cf377327dd7e16f2c0583127e6098d86fec6ef178c521b2edc0cd69e6f673a37c0cb06f70d9e7a29712afdac0d6a92befcb84e5ac88165a2909889d3213635faef466657b2f2dc6fd2b1987ba31536b2e10317fd87c31eee9fd4bf5f223eb5c6012fb82f24767aa2b0c5ab3be113fd9e1dbb280fa1c4361d8f73e3060b2b2acc482096d7a0a3680bd2d80df8b7a2837877cdbf9cd6bbe6d4fb888f63ac3e6ed943416e346f0281afb1e1ac046da99c50c4739a1cb13b0b62bfbf347e4f578d07c871592eb8d869ee4105e24fbc38dd12124320e630d17b07ca2592c4d14a8687a1411fcf587d73e561c0d68cf7adb62a0bb237f8f7f6d1f3894031545b059ef06d10e5647127584e203cc91f28aa66d80e23c9e4beced3f149e9e4a6a8572fb197197928be3aa0da30fce6b9db0c121f590c00d1c84016faf2ef078379537ec3c691497051ab65f6b0d9e3c7f49ea07fd7c41990b5831b35007c9e514e0cd0b7fc0f0f4c2f83cd81611531a97bccf7d75a6299252500a1df84678af40bea8520515c4047c473687a21c15405b79061df53cca044ad373e2bf5eda02e52466fc346bb1955dd7d136e71c144f15a839c713d72d1cd1a04f3f72020053f30f3cf0646c780185a12478e4122bab1fa4ce34a69f7039f3631d8fb8a89b7b7fe410c0dc1a184bc46702599c0348052d4c6578daeba5e311b68660002c0f847433d69d872d4af4071fc4bdd5300a8e6b47e47a7151a91327896752b92d6c5a4a32e2d614ad30e5342414e3f1011359a99e8bc14879af77b92304181ea1e087c1e52e8309a894cb540afd0e5607f071286608ce796b10ed39986b00141f334044f3384fc33e5b3a30ec2658261d75e66a7114930b32e1d661236f8bc37b531f2045033168bd3405a0c30532ff23d7ed44917460f1b79dc6f40e5ea8529627fd199dcd8bb9b4dbf37abce23f390310b6a7a82900f1dc24c4db35356f15d036dd2621c562ce671eca43558173611bb460dd528040cfe0a3aa96ae4b19923eb4d9eebc963ce409533a52d7fb6e3616e0d1a67a6d108d6bbdc75fbc78bfb335aa0e16228dfdaa6d842e0b4a98c6b00bf6a6842a2389ee7294122409e9538977582bfb15b082691d353ef5b9c2b3ea0f3cd0d4ded3301f0c97c044c3c2a5b955753969ea68ff5506b57cf7ec8838102b6cbf375b7b6d8b933a7e16f37e5dfcd2897fb23c30721d259cba8dab7fb6180c10972778377a0ebc852bcc46474dae780d1cf91e8d3c0baa21ebb9ac7f5d2a1d637cdc7c2ed6c5746019681137701587ad592c4072081f311534eda4217f8a0adfccb255f4c905270d37a7479d7bf5da46ecf2be4206101240c9c1082ccd8e06462f258d3839aeeb51e61bfa8410b1b03ca2a5ec4f6a5254c275eb4ccffe950b1228e9abff0cea07465c510107ee0c9f6e8a98be2b03351c56ef2b388c3f440e8a26efc8a3c2a2d80220591395dd60ff2ef2f97fa83219e28056f2a55b4193272d84027df7f6c0a611dd90d602e2eea66bbd7848c85cdde66c5af9275fd056048fa6f88f510884f6e8a8fb1f9c3be25365540076b5a460b22ac8a386313c0a05ae0035b5205e81e1b4a64594eeaee70f005a5fee3995f96e0732a5402bb34d12a1e5f52efeeb78d1bceaed142f910819a0bf8a73dd2f532707cf0203f7589b10a134c538b0ebecbd13e6166798938a16ca3830aab58d40e38f3b6057e9e2bb00e6e6044a70a8f3ace6f133b8b016b68ff1f39081acb09a825cc76ae06ec4b0221989d2b00df357297a6355b22ea8247c31e74a4c34ae5c09bc386c3b4d3a960b225871d8fecd35c524e2dbfdb93cd1825e5e091707222b1d18d2090b37131c199c2a3ba33c643ef821f0a90a80df74e9fbc141619a0fe703a38b74dc51a3fe276b2e7c0e2f16395e0b7face90984f634de3e7e995effc0f571b8f6992458f100000000000000000000000000000000000000000000000000000000000000002cdd04a896f435d4584eaec37c59f5a781374bca25aa935ff351ad30b360d7ce000000000000000000000000000000000000000000000000000000000000000020f4cc692152af8a31091c201f44434165628db232e142db981015ef573eb24300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f02005ee934580df950a212ae43d8a15ee68647cfd61351f57d31ffa3a070b80000000000000000000000000000000000000000000000000000000000000000265f1da0a8b0f51309f658c330954b09a750bed54adea076cbf4db3df1d1aa9b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a2599026ef4af2cf606cd6e1e77ad1e22eafc0ef8edefd07e2b7784a7a4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b36cd2215eeac91faecf60e0fe8daff4a1f0e74483c2e932204f835ae476160d24b7bcc50b81590c80c162f34af8207c10ea713c808291d06d64cdba98667e0000000000000000000000000000000000000000000000000000000000000000140f11d3333b8970cc11200ad06d27f64e59a0d47365b42e857b97a5eeb4f0b100000000000000000000000000000000000000000000000000000000000000002dd3a20ce98a05a78aea2020ff5723416ec11153bfe3c70cae6021f4cb729a6c2293344f1f189eb9dd2b53338fd62b116febae24c6bb1494cda024724943a6051739afcd7fde4a1dcbdac5a454fdfa01bba8ab8ba61ca085b3d14b23337dadc0083312e7c032ada6e00562ada811fd04b9e3f88b8ece143b51ecc7f3913a288a1974a7a13921a2ccc0055f4ebbd412285d3c200cb77e9597e44b2cc8427c663403d4f310c3646b1214f3c654235da7a9df33e70045430dd7bd359b28b17320011cc356ba0e5862fefefbf1b3ef26cf3fe9f97051b5964d6e81ffc90876758ec203920a6983b0af06ceef64ec2a2cd4aaa430c7be3d63b764e5f771c61284c55e29625ca4b886840be661d7d36ac355d7137a46105c1048e33f4aa3ae186b0b280ba35efe55d2fb542b4c5aeb9c17edfb286e71cbb05d3f0c886838a5d6bb3b48241f8cc34b0ae001f7cc3b924bd106f2119e84b0a5ab45ad6f9d0f54c562bc722677996202cedf1b906aa2be40ec2d5fc1982a2eedcbf66cacb84dc177f1ab13020bfd53a9f6061a2af870460e8a9464f26b9f88f6f7c2c79b960abce133d2a7133a4c0d0c3b7a1325325c69548c76207a23ff6748444219b76551b358341091242d5c5aad4f60a768cad65c1d10613257941dc0e0bf4d90639d82c9a70bcf29303bbeb67f093b0ff01290c343ebeb5d823c8d046769628a0225a1e9906b665f2bd3d2e96b143fdfe42dcacda484582293652a51a3d2bfe25892e5bb6dff5b411ab11b0a0b97474a987b4a708e751631743bc2917f371734c023ca0a82df7dc2037515b37e629f177aff6d8817cdf6716ea9b2ef73763e2b176dc742e048a5ad1feb682ab1f2876cf664aeccd0e5ec1fc2db883651aa6ad9f9bd6cc69d58c0370ea7c85b1f9b02168abca2a7a7322dd4a0d13cac0e48105d3edd96d325c4e0bc2a42932cd9502e1bc89b379c0a2c94ef14921df1df8a6fc1e88987187346f8f301679389577589fd983f9fa0feab4f45d66f31e8f02521bf270624d7c2cc1c9407d2e3b6a89aca318ba8f027eb161c163fcdb98f1a459a217975b1e06b5613aa11788ad10e22dd94a8218e7802b4f1684c94fe5013cea3a0e27102ef44bea2722ee8b8ed4afe05f5afdcc4092082ebac63f8399e393c1ad8194f5e8a3fe58f840fdf5281465675f8664e71cba16b659a9ae8fe6dea8985e96cc8bfd78590ec23085d9ec68169fb2cb34e2b17d9dad23a3b6533c2c2de12ba1f08943a4b3db64a04ba835be643db5d3ab108fe99fe8eb318bedb4ab3c665799082201a14cfa3e921552fe1a734fff27c1c5f4fbcbbf39a5f68e22aa561c4aac85c17045ce4e0e9113211dbe28edd0a26dc91bd93ac34685784914314d8e7514e3a2071cccc3372148f838d8a9217101d7727c9d8b5ed3629bfd7ced6f9d6fdabb72613593b49870fdf5281465675f8664e71cba16b659a9ae8fe6dea8985e96cc8bfd78590ec23133f84f29b02643576d788bd0459b43f72b6c567b909e7e17ffd21113afa9537055d2a4eb0aac67f2156525d55bb7d5327572856bd56b9e52c0b242e6d67d0da191326c7f64b8d762f6daf452af1c80d529af49362ab42d9dc789457816dea1c18d05c13edd9a88440b23897ba53cf492d106507c533973cae3bde0bdc3feb8012b9559a871fc26269f3450a643753bb30b33122db813f450d55e5f63b3427ef0c723b925ea6c9f31e52b8f367df4fdffb07c4795af4542cc95cf051296c05000c8eb34929abfa5fbdd751eea3c99525708d771e11276a04ef804556111751c7254ccbc8fe15c0b9e79f6a28db84fa17d7a707d357c072dabb4b0837e6b7fb9413afe6f7d842acbd9a8627b6bc89f2355b05131d09344d84e919825fded3660709858f9a148bcf16571fb7fb4b792370eaaffa0f009cb0d1b9181f1745a42c0915a25bd2dac801527acb0c0eb9c565dc6fdf46cb2ae36e85544313d848aecbc923b4c96832008f3a57d71eafa648cf7c4febf84177ab8387a55be3e862bd3bf111059093e6c8f9c9197fb9c2ff9ff1003a4d7d3d5de3f2b269847c48429fe26d', 'transcript_type': 'EVM'}\n", - "Time gen prf: 7.439970970153809 seconds\n" + "proof: {'instances': [['7469705c7b45875730aac31b009e8f9e9f9e57031bba148110877f78e4518c22', 'c1f946e3fd2b2229bfcc2dc9ff7f4dfc1fddad53635becb58d130bcae5504712', '0100000000000000000000000000000000000000000000000000000000000000', '1700000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1a09879e14b606ba8c989eb87435765f15c8ec5fb39e8ae1641c18657545a4da1feae65c8e87459f1c446f95db285227254017d6bd4a130eac619598e2a932ae247278c145339cedb5acdd8c6b82cd5544d1eee7de2feca5deba7079bee562be0eec74a4cc7d1276fe29976bd39ced477edcc57650929e1a0868cf4dce4c0d480a928ac0f4a5659dc1abbe6afccf70e2f41662045c75de5d0fe473731415e61c21de2ade6213ea5e414386b75105c0029fa67a24d825caced2ac3c0c3d8425fd08cafafe02290541e5951dfd8db80872d0464dded84f2a8b00f27060d0ef0afd18985f1e05e606083a9b65ab77df38831d595937a55c9cc4ff843c09380ae1a618db3b6fd795282f6f9554fa8b49124f08c5a421f0451cfdb2458ee8e7faff720a3f46d4fa829766052788c95a5c0b7878853a0c38295b2ccbab3030e4d8bca92125e107950c17d96f6fdb377641cd1c9fe4174130f1f1f6edf85710d4bb9d331141eff4778be5c3771be1b6ebb5334691881a6bec090e6809e0c7ef124019170dea19a830effde17ee20caabddb01ba4611210b59c67964dfc0de9f0b266f4516da00cfa29e7f1bd22632b75a2589e7555668174e21a0c17d96fb8e968a77442b542ee567a0c7c752a722174dfab0260d6b8a1174b65fda155efb267012bce71277c94a611a7a4269a49bca92ab588f217f04c2d528e4995c82c56f4d5e66eb1ed3bc78f4ade584314038897a5404ed99c435d36acde6729d98c2002a50188103eecde170463870930ec0c498e061931aa52174396c70391aef080d016963ca2a6f59d28c30467c22eaec857a57d20027c43b6e5735b9d22730ac5a8e39de850e83b4a46ebf2ee3050a8dfd9f33c39ed6c9c3c30fdc8d093d2439b9acd3c08e2c91e646334a3416352b097584f1923b61696ae74185fc99037e40d74304ca5110045e62fb7f60b17858f573108914d42d82abd4c8f9b96654a1e371a78c7a7408824391e2889a64ca85b6cb7b597f6d9fb0d63942bd2301f153ee748de7b9d02fa00c7f9fa7ef9e6bbba0c5d297d5d52410ed405497ab3ae95796cd480f9b4c0b0d36d80306a0cec898e545fa4e206382b2ca62e793c5b1f7a82af8abfb072a2d271df252af2edb392813bdaefa0260dc1419059e57ad1865339c601dc103f2164707346fdacabf6ce1ec0d3c073dd9eaaa76d94e188aa9978acd5114908c211eb4be7d945ea8cb9961c6fba7c53834703efa663f451eecae17a7b751f0d85203940a60c0c61a47a932ee846eb82bafb362ee45596e89d4a96192626e0eca71102563e7716d88838a24abb14c79ea42589cdd8e0f62ddbb67f28c3ff16373022ac6edda858d08b0eb33452fd444b99df53d0b93c05a908267e103c3dfa25de724b763a81d2b9cff20f20e89e1cbe28dace668c5241b90fae262b200157f47c91bb31497094272a532e3e8a161445213fb79b05417011e8d10d3fc06cb4ad8c31f6e82aabc960d179feb866f7149f40ac92d17c391d1ee1488aeb49b4ee1101b19982dd0cb90fe2ebb9d3e58c7efa0afc607eeb35966ab1fd1a345d85ba5f7f71f4d92b36bb56189ea83fedc5c22f55bca70717a28b7526889de0bce3f58262e2aaef59e4a40f140e6051b805bfd03ddb0feff810b5a2daa26245c2e2fc1ab3715f657d31314a44dab1f3c60cbbbdf1cfe5875757745deac1407b8611745e59c2ee41fb48e243aae61bb9cf0c8f28c34d2f99ae34402fe58dbfd001e5a6645a41e819e1283b1b065810995dcf1abccbdd2afd5f230f7af28dde92a91e63725e81dcc64b655f44536c4e26dfafa299a80f248c2cd8dc5571aa758d4ce7340935c2380cf942e0c0d3e395e6dd685ce650fba5046109e72895315f4ecfdc4e073272ad7adf157a0d07054aaf67b6e41b2c5dd4a2c5892579bcfdc53f92803ea03c811aa27336788637499c58f77cd60878536e33732355f2c9f76aa91234d3d40d72d1dc0e799469ac2505ed2b2bee013da91fe8178ab83216ff88b70162ee5710e010988ba935b83114c837dc1b87dede3f7bd27fa911bcd884a20ced82cc5ea2e17f2afa923f827fad4b40af257b73667b7d3eb9fc458c6045f5084c0966fe5a314134cb5ab53a4db50b634e92d25f736f05ce8a87fa8626e8733adc06b7339ed14db76ef841ba1d1f2112b75d69ac692e4dcae85eea79da2ce39d61f01d475870bfa8066aaec6655c10951c4253ccc618a8a338103700c008aced6b84f54774814e029447506649e87349788060d91554a4374265cf219bd4407505b95d9d8bd090295bf7ab1a2880e5e794e3419cbf503734bfc4895a3b6d4152a30361c52ca1e9268fb45eb1662f7f619a75df2fc159cc069882ad81772760c35a12731b7a521248e8b86dbb4a0ca3a430a6147f528fef7108aea3d41bb42f422d3e8681d6413e3115b3e8d7ce181aa8734cc0f6febb31e0d3073c33c6ac7b61378234365b81fdace291c7b036416437971f558d44c3576accceb6ea8c0a129d1a1f14e66432fb5f5aa5be708c470931e7c69176418d6c577f85b0ac8ea52ebf40d8294bd5f1339c2499619a4624900557d76766360ffd6d24173720c3acc8b55f3470c1c941b3df8cb31df34ce402d8dd18e4ac3444015fc7be8c6f9499747c6e9b448ac121f6b399df3140737ff32419ed85e27aa2a03763d0f2452f92194f673b77cc2a709598f90746cdd7629cb538138daa48f59f2d8cc9648f5fb5c18ca950be1971d2a558a0201a13e6e9c0839b2cf5dd65311f1ccdbfaf83f999865e52952a2e80209f01a4ffc925f68677bff3cd5c408aaf14d2457d6db8cacdf89b5d7cc1001c420b9deac4e6247ad61b4999f933fa500fcd9e3a8f19faa6600ddba01367c80d51a5c139b75c38d67d0f87f07746d9daa3e84140a6abf60e504e5ef891e0de9b72c4d40601f5908e4e4212081217c491aa32ff9f160abd34b8df2fe35fdfe322f1d35e4b39e91075cd681befa12e1e60bfff57dcd5e322933c9941e56880c574f083e784a8522f1a47c094c29f915297021eb10984db09a2964aafbe640fc7b972bad55d4868895b1b29a44448a26dc3bed7a0fe0d289876de5ecf802743019931debaceb4bb686f72f90d91dfcd93d0db37757b916c6d66a5131841730c1ccba1c56062e9c298fcae2e214f03c16c7b44285a0b01a377ca721053213aafd3ffc1c3190e485f71875f1bb52637c8a0ef1efd3b255a15af4e30944e9f7556c5f3d14400ccf5eb6f79887c83dc527e635f93698c508148ea4f3c5f604a348dc0cf9267a4cda1a663fc167c9bc44a4cfeaf6f9b33b91c76b754a8189f36fc812cb011d4635feafdd24ccfa307ed8b4d704fa7f4dbb4f40f52985a80b1071e577464f147623e81ec5b1c405c84e160bb0b4721fb92dcaa6556503a23d5a97fae325e008c56c0c81d1796f8100ccd97c3c38ffe98e8f367b9588c5e287bef215d2c89c0a9121435b7ae168404ae3059c0905ecb68c494c39bc57351632ff7414c6a5030c607fb1d6cc4a378a577b54392b3c6f1c09a4b4eb10041696f68f8ceef4a89d28c5916715210077af8a33af249241f4402c4389ce3648f0531dd19b52fa4ad3085decc75588f18be693ead35dcc1f03e90bed7c587a3de3ae8d2bb18d609b4422289093be19ba4ee1486d43110a33f5bcdf7f91d950805ec3f4b22d28adfdf61df5b97b525aff2e02f02bbb5ce846bfe7667ac34f39d6ea658ce16fc5d6e247055c25fafc7c00be75bb530ee33c6d09476d2d07da01e619f8a11bec79b8753d07640bf6d30c2df75704d95197f79934edd3c83e1173576ce1918340028325a727353e85bc7f845407aa8e0c73d37b698de806300801bffad37805bc22d4769d085f693a789271aa14c615734f6cc47624c6445137f31da6cf1da7977436577a23be523654a43b1a8849e6fa3e0de6522f6835beea07613f357ae876580d7cc60000000000000000000000000000000000000000000000000000000000000000179afc9981086b5cbf9199f13f96865ce57489eacaddaa82d8ccd431377cdbcf25685b958e03d620ea65f3d8574ff2c93905560ac25018aeb06639121539880900000000000000000000000000000000000000000000000000000000000000002880ddb8357e933ef1c97abfaf02d590fc820c3f71e5d7c45442feb9a056b6d82e22149fb5d21cba814c72b17a8382e46bfedda17e5cb6d8f6b808e0feee198916d55a4f839fb00f54357a1dc46a4d2c1c9c111a37824dd32e7e56b001ed4a1e0000000000000000000000000000000000000000000000000000000000000000225a05bad15c129e630808ff55d418c2f2343fa85f31178c1e81880c70780ff013bdd27bb6cf9d352d445814062c61a9a96ef0a5fee53cf40ac9041e8d1dc8c300000000000000000000000000000000000000000000000000000000000000001cce66235a4cdd674a54786f1bac0b06db5cf883e6f8db2b81d0ba7ae181b14900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001db0dca56090dfeeb232f3b2d90693d1cdae5e007c1195f197c0448780af0a1606a6fa97f1e9bff63a06d77f325bfc0433641f75adb26803c9dc88bcb27039b12aee51f68d77e5a4db13f0c21b1dd642e285363b9db16dfd5db2be0dca2f9c490898406148fd62a3377bceea9519553f1638b642727fba66e8d3f6519c20077003d35bb01d222536d1d509ba21e6b4b7f041535326dc01ec868a7ba344ba7b2f12bfeaa44a82f0f8cfcbff7ab243e73451c150ffa8c0644f2f2c45496c0fbc2c0328df5a7f0eee553ef40d9c54e66a7a0b19fd44bfc80c59de6131d2aad144b903fe685ab37add72efb4a2a440004500e31f8fb78db91b3531eebbb42e9d18ea2d50a56f704843b436ac910c7948f180c4d1685d97852146dfe96531c915dda81e4e4a3217d46159a9f3cbbb90268f993b60c192a592db6da0d9ab5d14ecc47e08db17d56bd44ae62743d55cee6786c3d6660b45dd76a6f3f2c7bb8e073279aa1c60d6f58efa420f7801ebc32f5326d8827b17f81cb50bb4fe234deed906c78007ab85c538434a5a6543184858b19d46f012ee5ec440a54085c0921e048461501e758c45042b3fd85465803cff8016945072417b5f8da58a01098d72cf533c00115c3b7ea03eee178083e44f2d2f2e25a0205dda66641f06bd66618923e4f5b42ad26706c93249a1b3d0d2a679ec220865459b25e4c5c35644424a9c8129fc7b0b011d1a67276dacd592d170712e6a4384f6dfc8854d4131a48662dc6f5911961e990c2eeb1fa8f7798c927626fe0b205d91c7ac56e41372f6f068f29f5e51a124ad499ed8eff643dcae51ac58f361fcfac7ad08108086f701748ed285d0684d06b62641a5a3da35a0a576f284cad1e76b0cc1dc57736560b803f809cf298c80230ba98ca4b62ccc9967996a590349ea794a001e55fbffe2ea3fcf7c6175ff8e25eaaabe25aa7e71158b48770f903ae34628814e1bac124cab6015ea696c9887128feaed90d5b6aeac993b3bf0f38e2262c1e516c60fe835bd697eb3877d1c5a115a77e492422c89874754670f0dd517eaf5890d2a5ff3ee0c079ba5234bcbec264ad639719abf5c622bae08735b9dcfbde635cce59470fa7bc2bb51103fd1b41493d55e999b368dfbf875ba72d3d692ad5455c9057eda974dc20a084c404b67097bc03e37231b8befdb26227e16efaab2c83e898094b31f093b75b7a4d3892809d407d0c0fac95223c395890477116d785234b20a61d5897b39f37fa17d5a021bf1db574ee7765e5844f411901d0eb0e596771af5bbe1d7e2534e1f97facf3323c3421000257718f9f81d382629ceeb0b50eefc90b487f737fe31aba83304be08fbe09306d58e6d7421ef1cdbbaa7ed39c854f55e779435e085610952cc48aa13a0bd154af4d9963ec339073b18803dee8160657128c133cc819779c9f2bdc4195ca5ef241e08afe826aaad517325977888472ad6dccbb67cacb52c357f0f5c121290e51efa5cc354f11a674c04994fd09a4fc888608210335dbeb03cd1db2e143323b936137efe191ba8c1e3ffea09b6cf41fa2729d04baee382c0724103d11feff4ff27923f83079adb9d7610b1eabcbc1fd32b123e038d47a2750a62087d192657d1b659bb8057845ce53dcc623139c93c8cd409a1e0808c8bd24a93f9a60fd72fe74e7af7414f29f5891d0324b6b296dd0b708a748f6162c15af64d6b9b29ec694f9edabb9facf12b830ed9e787599e865299474d60c873a6a6f1317ba729ce50714f9a0ef86cccf872801dd628ea46e2fd426dd2ab8be26fafb784dfed0571924b7b7c5fcf3c8b0794c809c39d91ee84c9a97dfdfed5c16116b269057f04194e0d49b732f97993e250f244f7f692baa3423e3153c00f6f03d552a23daf14e66251fc48791c63795534d3ead9c0acb38336c59ee2a1f01eebae44478e881339226d7cc65812cf5924b2e16fc601c593b9a21f2754ac7b5cb08ef267327d0810955118989d7b18a463d7f66b6b6bc19407ca5f6013f26d24c67e24a375a31a9a603cd1d1e1a5d0bab20a59af12778c78f13dfec5fee4343dab91f6a8757f2c021e49286ad4bc55c8bd83b8efe4569548ce3504a7d9dfab665cae1b435b430ebda53654686c5d40a0794291e894d98f98e5fca13a5b375ccdbc2c2cbe74830eb1e7586e0e6de3eab4cb00a85382a5fee43edddde8affd9e4a2a6b9e0fb41b2d59f0ce52350191d0831306313deea09c0a02a909abe993f31c76cc716122620a9fdf01dea4ae535376677599f9d2495660856e86eef70040ad9397371e28cc', 'transcript_type': 'EVM'}\n", + "Time gen prf: 7.614093065261841 seconds\n" ] } ], @@ -243,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { diff --git a/examples/covariance/covariance.ipynb b/examples/covariance/covariance.ipynb index 5b06c39..038e847 100644 --- a/examples/covariance/covariance.ipynb +++ b/examples/covariance/covariance.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -126,12 +75,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# note scale = 2, or 3 makes it more precise, but too big.\n", - "scales = [0]\n", + "scales = [1]\n", "selected_columns = ['x', 'y']\n", "commitment_maps = get_data_commitment_maps(data_path, scales)" ] @@ -144,17 +93,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -175,16 +126,39 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [0]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":0,\"param_scale\":0,\"scale_rebase_multiplier\":10,\"lookup_range\":[-448,6246],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":13120,\"total_assignments\":825,\"total_const_size\":8,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,0],\"model_input_scales\":[0,0],\"module_sizes\":{\"kzg\":[],\"poseidon\":[13120,[2]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" + "==== Generate & Calibrate Setting ====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 1, param_scale: 1, scale_input_multiplier: 1) ------------->\n", + "\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.11755371 | -0.23510742 | 0 | -0.23510742 | 0.11755371 | 0.23510742 | 0.23510742 | 0 | 0.02763775 | -0.000036566813 | 0.000036566813 |\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scale: [1]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":1,\"param_scale\":1,\"scale_rebase_multiplier\":1,\"lookup_range\":[-930,12560],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":13120,\"total_assignments\":5558,\"total_const_size\":1222,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,1],\"model_input_scales\":[1,1],\"module_sizes\":{\"kzg\":[],\"poseidon\":[13120,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-1,1]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709718894085}\n" ] } ], @@ -196,58 +170,22 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 3.4178340435028076 seconds\n", + "==== setting up ezkl ====\n", + "Time setup: 3.4424970149993896 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 3215.0\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[14955570959218682635, 4667139652385906200, 12836539004462631467, 1774684518626433649], [4224417983558473805, 851357164555783563, 5363851773531956453, 1448631618362554917], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [5743885005642251665, 3430503978676436355, 7149667244725939006, 2902673458086333540]]], 'proof': '244e8813d8d36db7f4a09827891ae218e6ea378c905a209177d5b103ca7242903029877927960516e93221211bd008454799df5dbf923e49755f424f500348270333819eaac3f03b25eeeb6d533769036712641df0ebdf63519c3be5eac5a49605c6e3b0ece32c87dd7b5ce02accc0015e4e7181339d6cc4ad5f51325ef6143806e8d8578347e5897ca6ab7926f0ed76a727a7cad81553b7972da369af3ef23826e6d2cc5179706d652ddbc46f3a25797129860d6635181cb6e9d6653326b8900f7c83818bf2782e32b816355a3bdfb77fcdf3c1428a5f17ff1c8edb601828ae169f3a239348a3ccde70382d57d68702634ea9bd1d27d3fe05dc41e442b563b9139768f9f6a2e6e6147b2a49da23ac858e8f1fea27ab7a1a4731f6ef44b5c73219fbc41fb5dc496c1327fdd5f50dcb14d14669d40305f5414b39b35963aa264312905b5067bad9fede930cf78585e94a208a89a13ba55306896685e27b8eef90162cb19067af9b4854e7e273e40f590aced64bbb0a4913534bc94c8d8256d4800b6cc22d4f073825e5401426f45e5d3510e5a8801732271e71fede0a5097bdd2227c8c578bdb683d1db6ccdad229f3719029562b11d03df9d0bf2b89abe47e3d081fc3af4d5d1b986d9de98dbe8d96909e6cfba45481171e6c49ab3c1abd59be0d6f45979af7adce00c1bc294413c6c73f661fee05ac52bec1bea67a4992ea38235821c709c9768c801a165395ce68ad0f5c12eb0fa8e210508108bde3e7c8111e9905c197a5ee811be274148e2bd377b1d9a1fb69753dd907e924723f558023105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7123fcfedf2f8de0e89f1bd7b0c9542c1401b3a7c22ffc74f50b0edc74e84c9ff12ddfbfc264b4dd8575d555ba392b120f00d6259947268d08b3c1dad512e03cb105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf726755fdf8425e36069f280491c626203d2df775b1ef47eca8be60efdb05ddb84284d74ad55a6ff524b72e03701bdf084fcdd5bbb0184c8b807bb6f4197822d9a24d47ecc350844b3f2ee602b03c2c51959c7330c8e896758c2009a59cab6417c20ca77d7f846b3182c4f58e204c82a9cbae84993a52f6d0e778bca6558e3bd6a1321d2fae6e5c8df2d5259bd780fbb3239ef89e36107d188582861556ffb6d0d1d18ed4212cbb46bfb5c7990d60c89250e60f2ce59128cd4313adbcc29e57e602d52a79a7f7c2357801906f65d8479eb37a7a50a0184cb1b07efdca7e6f582b108fe8bcb3a168f88483e3ea9bc7bb3800ca4ed9a84af4db58d8070837c6fa2e706837acc345cee996199f0a43453bd77c192452d793471e0af47bda5d755f9ee1c485037a0919c65efa60b4e726bb7052cee40beedfe0f42fde7cf702887482109bbea19074f6df8c3fa0d8d4754e500c59e327f12e3a815c3a672ae1370e3f32564810d324d8892663c2f23b6d847f2252ea85b2a467a4e5444d38336b287541828673db9b755bbd7ac5ee5efc882102deb22aa9a916bdf3fdcae79b0d9b98028e2f843189a0e6329d18f2037bd39dd1794a54d459d9e8f8c84e83ac15be9220c11e532580f3bea02eef1ab518295c7839d3d2db5bf27ce29cc1cabbb59e01a177c19fda81d156cda38c163b1be8a9f200849bedfd7224f8de5e9b07b2b5544125cfc94c8c1d1ac4e3a3b6cecc329bc2dd944568c41aea6db53c2aee419839f2018d74bee5d9a4e34290b00444f86dedb1697343431122b635782da2aae8df728523696971a1b36926134c469f1b940819dc8ba6cc70c47f796a23e9175232d1b5ebc147f79ef61b0377e4bf7cefcb9fe1eb8c9f4cd7df798e1c07e4e4dda99135df59c37c327fc895ca7c7d7227f460737f5437a74b7024e9173e7eaa0a2e210ece1df3667fc14f478e994e2322fe18d4d48fa0f0a92dd1c099b961348b0ce1a64dcde132562e4d8e6839868b03ac0578d9e56e62fbafa6b1b9a2a5269f5612c59561dbcddf247729897183c7298b83ecc3e54defe1dbda762e82b46ae2c5601bc12f91fcc21ddc5c1ded49fb3578671295a9471a3801d434d4bad8bcfffb60d1c6d45f2648a9240e0b1983931b7c0e303f5a2ca07f4361fc1520ac9e3c4ce0b3ff1a3a04aabc39d3a7ef9208503a71e4492e8249a10897ab1ea132e1004ab0f659fcad8a4577a6fa4e0dfaa659c1038885bd941cc0fd4d00a7a14a56019d123a249ff20b24b95f3a2d669390f003c56a62a5ecdc0648de664400265d5d19f2c01328ae2257189f3d2c2212df1527a4bd8adf13b4bd832a242e0d38d0af5e913e76044aa30542e3b16b888160303ade448b1019b0d4d128df90458ec3a646d1b4e5baa5a3a76b897e7f969cbd2eaea00d658eef26df8977c9f76e9e4a4271701837ae3028801f3f99629ab649d6d8c3f1cfafe6b0c032051cf05a27954075b2411e7c74fcde035bdc951b8798299c48df9fab70443d23b70f7b4511f725cf22bf572a2a431a0b6ba852bc548df2e4aadc5dc8f1bcb323473106d6d6b586bc528e28d40df5a339a0cd9825fb501c44904350a19af2a0b7939520ca4cbf99edf1e935dbfbd55b5dea72db2319384861299803ed7a31818acda8d11be93fe7d0422c592ba3bc76cd3aa71171626e161ec52f473c18bf4a84cedd73b1c5dba5b362f885b52af08953275ec54df20eb1be2c952b5d890999fc379b39dd20c24d6830ace3616f400be2f432aa5d738a83b3914f4a6d0ce159a6d7ab5b5813ebc3d45244be3e95e9d7482a305e6c3296d36895bd7dca23865853b321a92669e499d7b206ecfce22962228b8d00dd69730e14d0d2b2f8d8ccec83645083f7369d7405424e082295fa2e571126478d2912210e521007c50e9f5abac5dc5ff907c025ce81acb91a1ec8d2a7f11a5fe6d6ee144f6afe8caedf88c4dfa8fbacbe80f51f239182d42a22f22740edda5cf3726a932f3fba54cbb61eaeb9f92407899a412d3590228231764c9ff87c7594e3ab93d15f78f01aa7948fc3d22db4287a43d066ec90f9b9c33c1d4f6435cc2fb06784f8a25f5a463f03488b11e654d243d3ec7c7ea090ec8f516565c817c3076c069afb0c0a0d7040fb80be54a0ca1f3e2753ef94b2b3849aa3e9a4cc20e5aa54fbc9b21695fcd40925ef7cefe390fa250678ac9e51d77550ae87dc0de3833b0910c45eff25d6a790e0d7f3ebc8cb6cc648f16721d0000000000000000000000000000000000000000000000000000000000000000189e30194eba1431b83808eb097df33df9007860c68c36de5363483e24d0ca410000000000000000000000000000000000000000000000000000000000000000137d99acfaa0200f28df7aa2b4ca99247c0d97422c1d5f0cbe2c686a275bb6560f21e2eaf5b72ca86e72a04e590fafc5aa8449ac6274c47f7df9e006f3bd3bc62e755351b1d61feb0ce7ca89d39d1c4eee0b20966e70367e54d27ccb1efa7ab023d6ddef3b1194518eed011010db2f6f268ced2876dfebb436bfb94ed4c1fe311ffc311d71a859b91923cd5f87572358860ed3a198608d01aa684c792c6dc7281a42335ebcb13a354d425a8a82789d754f5d3982784eb38810020b45ba6d54ed04e310469fc31d81a39e515839ca4e3c6b874873650252185a12a6ecb76829042cef66164cdde28ba3aa4890b98169d9cb9f7874c04b6413e9ce2bd857b7ed1b0a7d3986e24cb9cd86a28e5db1ea487610660de42a8527a85d2023f9fc89aa2c273682ec13144456d708d8ccfd57a04752044e3bf8d7575952b0fea92933cbe4214aa56351a1e3fe6c258bbe8d9e25c738496ba80e90a42ccf78e176776062d009d050a59b4293d74d508719827f37cbe5e26a1f13c86e97f7df36b965053ab513ca6c19e7c2d0e814c6acccd4af3d7caa1bdef0ab7a1f77bed8e0d1776cf0d42c7f2f760e04be4aa793cad2d9ec70c19a6b6d90885416fb4c32e680ca13495905998d52a3cf0929f1eebfedd024b446f7dbc7412ed9af5df951a6e20e71c8f512a64b316661755c06c949225310ca75b7c97e6e423cfdca4fef34829fcb42312975bdafbf66cf3b153dd4a90bbc99161168e5ce93d9e4975cf78520111b51e60aa147c49616f4cd15c22126a7e86e6905d2f857d836408125fc10cf813a1f0f16e4d2692b481d6a716448cbaa9f158e31c590d750a13719ff96bf81c255636b04874d02349b7410e312aee0c3e300a60a0af19ff3be9df56b1a3f86e635cd232b819973ca6884f2cc307c4b17afafd1b515c52e2b465e85cb021dde4480abb20178cc69e1bfba3006a7dc1046d9ab5ff9918795355fe98f9739a6fa0659f7ea161b1c39b28e4450226cb79da65b2948c7195f5b82625eb08efb454fe8bd54a02a6ff09a8a17fd7a3e93b486389c509113d98a0f16edea0bf75d2a26033500f424b7cc858a2d57f7e5c58b1b5921a9f35a69c1b9a516b82195d7520c09658a18181cb1bf943b8238197a390efe588af3c262e2ae997235bcf5ce8f29c179831e15b16152b81a31083b848476b10569f314a7f2d29dfca00940c6e0050b3921a2214109161742377b6fe97fabe848ca123b34d38e5dd721b4874c780b9a1e2fbb089923f29701c32684401d9135def396c05419ddc5d00cfc1d1a4f98a5acc8b9207fce0fbbec465dc1f7915f09109376819af81be7dc5393da91eb325aec8b6a26828c0d2e26aa9ce15fe5a125a12a90467758d90e11a786bcec318c581954711ba4833bc4c877dcbf3ae8fb2d5d7f1d51cf025a4faa2195e6e2d1668465ed5823ccffce077b68cf3e6d4a982bf81046ad99ee3d04dd757e05fe9d678834ca2f1acbdd4a6a73088b01fc203e13e460621c5d1cfde8b2c4d9098660aba0dd1ad0281bd8c20e6dff9a5884e2437c38354032503aba4640ae20af7967b9ef057ef500383193139cba84197c436a682cb4545915e385cf8214ad3464800accce733423c2eafb47d31f0ed1a8228fd447d73f0482f681b98658f5ac4aff0c9fad790a1b83a2b05396e24219f62e9e7d35b8f4fb118751b8ee4d67c8efdf8755edf55b23ccffce077b68cf3e6d4a982bf81046ad99ee3d04dd757e05fe9d678834ca2f24b477a72818331d8d544df3ef57b3fb339e0a4f5e92e5a5c79e7dcbe786583e1eaf09c99dc5984a5cf9a20a516a1dd2a9414e05a3bb7b0bb2acb56d550e2d5a2a7377ca0da099c3018a9c958ed8e7c2ed631a73c450a6db2d0f224a2751a6e018544e4c66328dcfe99383dd109979b005a8b9b69990e820d9875487bb8833b80bffa3cf0716798fefffdba3e90f456811a69fb24bb8bd11d9c3a65f34ae59a303cfc9b40752f00427ccbcfe8f70de65a976eea5671f11c62785be5c7f6ceda82534bf1b441c28c542a6877a735721450acb6bb25467a52db069b81e6665f25f', 'transcript_type': 'EVM'}\n", - "Time gen prf: 2.8889949321746826 seconds\n" + "==== Generating Proof ====\n", + "proof: {'instances': [['b8c4693b3424042141e265e5179743499536c8b9f1ddc7d4d4fc847c1c09df04', '7d055c183092753c601560dfbfa0b446f5417438227d99435c476a0659de3d14', '0100000000000000000000000000000000000000000000000000000000000000', '1e19000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x0901c835db52ba17e3c4ad2d829a94763da3a1f56e0430d46d4ce585bd71eaef2b8e3724fa55bcaa52624b5552c7b86406b51d956c44f35c464a52b9128a5b89217fbae93b4fb53c34267b5af77f98db9c071b5bfd93989f2a3ce9f67f212f182e6b716926c2679632acf870f587058c5890c9803b94b2cb70af91f534b407940d115cf86ed9095da5dae663da161ba44fbb03a551490b2495ab42b2963ec30f1ea6aa467865e3b8a4e98d07a6fd27abebe58c886ac1586ab02346eb99a764dd05b62b639349d2d1e2c9d2080bb96a5bc29f7cb96369f962bdb88b43c1932f5924cc184c011c0db6d80bf6189069fb80073dc7c06880a7f50b274d0cc6c6c1562a702e819330dd316b41b2ab12c9b7c9d6dbcafd906f4eea5d5b970bb4c0f36b0ecc6717dc7cde009e33a36a2c24487f49290425910aebf8988041a1d3364bf40708268fbf1a45ec8fb0e157d76574c90220b1decb558bd7a58bf51546f83b62297bede3d6fd6546643a5c88407a898dc435c5f26b900dccfa05820ad2315a692ee6c5a5ce48ce769281ec22fc9cbd70b2ed022a820e9206529cc8d52e58973f00c5d8687349f8d41fb44cb82b23363acc6c0b70e2429687bba4fc119616e0d816e0a537e1fbf47b742fe883e73d5d0203ba411fe76ac097ace6dbb6499c41f927ea4f1745414142fe057aeaed72924f56622615075f6ac75586fd915dd942382d0f773bf02d1aaa09407271e02942d8088049b970162ba5b5f5868fafb814a10a0f8863924c1b1d10ec523ee9aaedb7d4cbb9e461d7eab5bd76688936a4218821b44eaf27ec14e9d08ab1193cbb22c5bde608925946ee3423edb791abad62c20a20aa0e6610a533b8b5e3227938b9792da28fc26081bc773d11294f82cf8b0009f46d7e41df63eaf91b85b9ccdfe24e76774a69193496c0caf32bc9fd37fb260dc6754436d0be1b9d3a310762d86d61172be61560ae24c624670750ba92cc2d241b2aff09ea9d1d880fbb52d37ec7fc73e222a4a73c6764b2cedf641fb20af51f42a25386ab0f5042d52c968d691e9ddbbb88371e888a9224fd916ec60a29e415f3b1e6bff72cf4b202dcca342f99820eeed0c36589a0701ce65dcc1acab4b32bbe7bb26f99021803f8c2865e94d120df17532ca9831e7a5bfd58c2568902092111be965776ded6e65e0035652969b319a4e9a8d34c77e1fd07119af09327bf070904c1e609555b39fc4fe0f7972e8e64efe98684607406e1935ba69db68f36254e9095a57c743b2b3a97188bd8eca4c096582082e2ebc1d1c956d856f1ecb4159587ef1ce5cfcf98ddcb45b8796969e76c79360b37732c7906259b8ac17b6e2f39b04bc3c00591c15dd640fd5cef46e7809db0b14b9d1e35064377f706bff906ac4243658353094061517eeebcdbdd3d87c504228d0f4ab6316986acfaca5628254fa66ca780649b7a805309f9098c66d5b58d455d6142d98a1fe8f9b3d4de2f7afdef5f3d5bbd7964034953963f6e4c30c2cc75539f4b3ac5c4d33d2b19ff142bd7e0c87b1651b127261bd50acbcdc00e0a0a954c4b0cce883a61681ae7d5040cbd28cd73fca458fe38c72098414dec711f0f5006cf87693c4f437063099109f356620d8c182754a4b2e56c1a7198347216bf7aaccf74ab4df49d923929cc2411826784a9034f59d0a7c6d8d4c982374c78190054e72ba776e55fb322ee8800d56a4e379b6e0bca578188a259553c65ad6de0cbef53613a26d694f11823df28f4bd1c2b3d49836c41ef59fc33b9ca57a9fb121cdcead179a8f8042554ac320b09d3a16e1d8cc8c572ebb6e23ab7fbb12bf9adb3264daa890e2a15590757212bd5fcd1f5da61b84d7404435b0cd879bb48d6fce23ef7f4ab1abc3c3a48fd4b116c540b851a74c2e80c27fef876047d48064ad65139fe55dba8ee3ab52ad70f0a027834914303f5a98e758acf76536e81060b1b8e95d00a17ff191d7496f73e2b411b850b853002c605cb5bbe07da4ffdbed971c6421be137e4e3adc7e95f39138fa364d8992c557e453c62dcdba9bc975e31b27dd2bec5ecec16179950eedf11f547f6280eaa6bf985574dc7f3bcc78f0fdf2fedc29dbebb9666be67ba6774158384f82ae5563a315ac5a2fa8f172f4dc2b2ba491801c9acfbb59ca35dfb9015980d92a90ff424c27e945c44c1c79c45d8d514d3eb87ad15801cef8cf9ab480168c6d3e64c6510b56dbe0e37bd2e57de8acdbc01e94a233a138ef4d432491105fd0c01690d5a872c9fabc373e76d4cad5004a06014c1e4d9ff6921919c4ab21dd6d6580a2aa25c7d72a290eea66b9b81ce19aba98ce363b81ad2b5f90164010620039da69d6549975c141781c86be0d038a23789b4350875b26540674e8e78207d00456c47dfc318bab66c6c6413eeecf7c86f312918fd95bc8eb4f73f7f8607f6cacb99e16b7e22328af1b1292dce056b6838c85669bcebf8ae6c2b5c5767263c4c088f8d71d7185cf35ed287126dad007301c372f6cb5815dd221cf0ebc51cf47373cd676243f6684b0ce58afa5e1d02f802fa1848d2a221959d488b77a724803ebbcf75c1df162567875563373658c9518a31ee9047e57a8b0f2b0079e70ee92be234ae84ff675f40dc048019e17cea0a19972c10c39c92dd427ee7831503b9bb9861f160e9e755dc71270ed7f6760a50151ff2b1a77d00587a922f391a3056f10a25e457c8110b7c5bdebacd728da54e6dfbea9a2bc6868660c8657c0f16b589739de97792bc2b03f8cb821bb08798b914d9a096a79ea3993ae9f722ca2c6e9d3203fbe4eb45893e823e8e16a78335c6fd0ac5112e718d0ceecac1b5071d403a3a7aacff91ba36f4d688ed0b7c2d20b96740be580b8d2b57126d8049d50484e036a6ef0bc412c276dbf3cf659aa218270462a77cb965a35e6b3207a29a074e4f068d9863f0cce030225983b3674adc795f2d978b89d643088f7208e30508651b19d3c7546391a1be4a66fa06df94747f69a5b2b06656301d97bcc012c508651b68b32a0eea0e6a28e7a86025189f40c9803efff37208061d3eafa008ef0b53a67026812916dab102f2b643c910b8d7a7e40a48e02185700b922f62682f16e13401ea20ba2ead05be08d569fae5adfd751df51086b4b997ac96ea44e8e424be6e18402e5103f0f909381d31fe1cf445219f60d85f53b437bd7787e82441191acc897b6ccc6016602962090f3ad09577fc239bd38501e65d7575856daac02d010b877fff3e60040236deee44acf87a71637b10cb726f9d02cbcf6905545d13f9b71e48c7ba83c3f1526f1bc897a422328793e7a50f5a58cedfce3577c15d25c13bece06d6b2e222999edfabeebfb72bea9a7410c199941cafe71e95c2fd900051136eaf60164270178bbb25f7788e9f37be535f6abe7154656b6f878ac0f25d707693e400917094ef73a71b1648f4ea20b415f628f9b50ab045449ae5e1d276158aa7b63e2984656341f1a32aa2786da45f9aa71ffb196b1e4c59ac3605a269d8cb592935ff01a5a22ae877426bd699ce990b32105725b1a3570da75e25d036e5b10fd8d0a55cde7bfeec8c6a1df0630187bf6caae4f142de1f7af3026f113b4adac990be22f57fbe70a30b453935d97e069936ddfd0aa56281b137c0a8425ea5ba5e6edb7dfad57202a79a42d1a7cfb5437475fdb921a0091576edad71f17924899006f839f6ffe50fa66d438fe98593c39daf081c4e4b7f8c9df4c51e025d8aa1d37b6cf863ca1474137ae3874d5a129bba0e6dd8d0c0e32cdfbe6d28719fc8ac15a9036bcaf31df27ab9d79514f1b2e0a80c06158b5de0e98e4cee59728fe006cd764e72fa15d73a467f73613d40ba1c4151427068efe267332879d771adaed13fb69581f5fd3e847492bfa855cb8198ab68a0da73785afeb236efc932296595cbca688351bff6b3efc1af71c802cd0e87d1e5f37fcca1b07291ff63d000000000000000000000000000000000000000000000000000000000000000008a6fced0e723b81625c8d8541561fbf755e01e246d8b85e1aba49e059a7de930ef0ca69508188a9169812c1ba45b1f644ee235b858fb3c6a04c83ad8b92d3290000000000000000000000000000000000000000000000000000000000000000164c547fd4353e665413711d34e82231447f91547a155c21f8597c5a2b7545c1268850f1436dbb02ea335b2e4d8039e0eb6eb6596c3a243f6186880eec71479e25cd2026aa664bbc1c85190ae3c991765e90546c75cfbc341ad3f016be0118db00000000000000000000000000000000000000000000000000000000000000001006e06af16343ffdd2feb199e06eeba042ecb4a8a9803aa885cfd9b7ccdef260c44c9e95787a41c94d5feeee4d337801caf3e7e5ace91d2027f491bea1bb5890000000000000000000000000000000000000000000000000000000000000000185627008ab9424333aaa21a7bcdbfce4cff456b19a84cc5b3c8dfb35679f41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000486378ce69e5e4518a631b09f4c624d5d25b2e74571b412df3d3fe06e0e178b04521b157390383d1a61732acc3020463dc9a43e663be7c06ab8e020562c16ee2b363eb9a6547380e50a5799f8bc71ce75c93f10a80517f60ec2da3486de5d2329e62a93d5dc5d6e185828362f606cbf2d4e5e31113bc3c4fbeb562e920a4fb614a368a2439281fa858aa754991774c9ed7812436579dbcf55b9ab2418e185640d6a77534b4e42a9a8a9855d71b3c80af6305b2d3a6f989baa0e65befd2cbbed009e58355bb1edf78c18f74f00775996b8a580d966545300139e53a37ad5535d0ac46a0c5a2bc875d796c98c4dab25a91c4ee4e4664acd4da93b3fd7ffb20ecc1344b5cd5d724761938ca7238ed30a9d17eb7f6275df8bfe2c5ee6560ac909070704bc7e499ad98f787f11204882939fac88a6d81df5e20bc11e4fe5d86dabde10c5a0476a3554c126e5a264ac56897683621282387ad51505136572157b04342bb0213e0e85a83694efa6b11e738acf2eca44f9a3f9ee5348ee98c8a4cb3ba2235e9c503b2d3a21e5beb94e8028192709be57d91eea2542ec82c3b857db677425e5806a79cad40cfcfb4ace0d1920349a984c61e9fea94e3f2181e7ef77d74d12ac7b18595e34cc27afcac97f9d431fbb174fb186c670b30565d9b2863ce4530f344632f611e30a6c07421ca00726d28872d50ae19c06ee638600bf9adda2522e2d7397c4e3f309f821281dd7b09ab44b5cd7a04b30c1055f587d68257541a125637170a3bea4ba1e11302bf228b1c8557dd705ce84b47914464ef0ee7866f112e17f811b77b812e15ed3fe12aa98c0b2dc8ac357e5b95b81c94bd1a6fa8d0f1797e4642f33194f19dc960142cf49e8d9a16ece84a2421308a9e7ab0f8f9043103ed3a74434e8144bbb35224eb3a9ec0570766ff134b6c340cfa0f1888eeea4067ac55a7356a35b0321fb2d8ce10a731fda10f228f4e0ea001c40ebf335eefc2d52e7d33671affcda01b96e94a996e9db836f07223b9a36c705a9304e8b99142cab9a48ece5049a93ba308f9d3e3a95684f6c5fca410b53c4df803c4f128f751eccbd896abfdd2447ea590d41bcb8dd3ed71e8a37b3f866d787d3c089f3c9420f5cbc99c51de931657b213a307cdd5d748b06d9480f55caaa0dc10ec81e0f45137d686c71155649058296d1774f53d7cb757ac3dc87b94d572b96495bd9883c2151e226069765bc21abf7f63775dcc9160e45a6aff3c251ead0f56e9d65fb822883e2a81e101884bf453abf33873828f3f6678e8cb9fe076356b3b76597ee912f95b090d3761cf31f0afdf5051bc9345fd95ede5ddef3138180d93368e16eb315581980dd2f2fb199a61829f478c6fb1ed2bdb35a756e49e767aab0ca82a83e2247392fe9914986a6b6a64fe9aed317d99c59140f09548b86bc7ab1fb2dbb5006c88215cd8425ac477ecc2c377035dcd72d1f6a8d1cf9988d2f41be6fb8836d09a377335fd54b831ab83d28069d3478eedbb261046f2761cb7344204b8e2d3a27c7cd213ac494bedee154e8ac7c8559767717d11b5ffe261fe8fc2dbf4412af12bfb95eda2cbfc08dece0279557f5bd72eab1bf01831127437cea18092bce342e37b5de4dac07aaabf84df15855c626bdaebc5212bf23063445fc6c74a12bfb05dfc79833cf7647cc4a32dd18ce3aaef8ec51aeb7d1f051a4726af48630cadc1176077356cd6f69f6ce355e5bf9eabb141f2a48668706cfd08c7bf9dbfea91c298ef85b45e5a146ca6eed0d44f76ccfd2508b4d7f3be47cf602b129afde0ab52ed3e9f1897329c1127b66330732afbcc4b61cbb7e0474b70997177c82c88f6c2497dafed6ea4d58379c686da61e7cd0d386b74e42847c20d7dab2bcc0de995d04d311b255ed116a1b723a9fa447fc4401150dc5b2603bfa25d578c586b1dfeb082b4f2d3cd1a9f2a6ae942d9ecaa69c3fcfe1654847cfa9717ea88e9801694500abb2cdecf9b707d626cce44f6f4b9955ed84039d2a9a749210c014da3f592a1d07f4c31ee2ddab6f0288d1475e8d181b387f3cf4392a8cd0c39fa224ec036b03bc8413f5c83df378e55b1139ba8c99bce9c736f76737f5da5f00c5f8824e912e2bd4cdc2c03e0458956533b6e59312472ec278a709cc0274a1a1ae099f6294077e1e2f1ef51d197f18e65aa9edba7af0cce7f66d8d5bb00cb556b81cd39b6509f8c2698e96a5e79065e8d68eb0f0abc67e4e0c065d0cc79770e72e4a0517b102f8e91712b81ff3d6f23c9ae68491521ed8c3fa278963cb7a23b5d4f6be00a6', 'transcript_type': 'EVM'}\n", + "Time gen prf: 2.4519670009613037 seconds\n" ] } ], @@ -263,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { diff --git a/examples/geomean/geomean.ipynb b/examples/geomean/geomean.ipynb index 71d63e9..5dfbf5e 100644 --- a/examples/geomean/geomean.ipynb +++ b/examples/geomean/geomean.ipynb @@ -1,56 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -150,12 +99,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:171: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:100: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:121: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " return torch.abs((torch.log(self.result)*size)-torch.sum(torch.log(x)))<=size*torch.log(torch.tensor(1+self.error))\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -202,7 +153,7 @@ "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [8]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1522,45056],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":911,\"total_const_size\":4,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"Ln\":{\"scale\":256.0}},\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450475706}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1546,45056],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":6617,\"total_const_size\":1507,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},{\"Ln\":{\"scale\":256.0}},\"Abs\"],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709631663708}\n" ] } ], @@ -223,14 +174,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 6.470684289932251 seconds\n", + "Time setup: 6.885586977005005 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 47.69921875\n", "==== Generating Proof ====\n", - "proof: {'instances': [['ad297b8184503f0131009e1b94795f879c4560a1c673ff814dc0228dafd72103', '0100000000000000000000000000000000000000000000000000000000000000', 'b32f000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1b29a401415f313cd1a192de746e883aa30b0dcdf1d6d43e4793c83a77283eb20df5d3e057e791d9169a0a4e6e77d9118d0c4258a6a8eb454cecf0091def82662c4e795df31205970227eae5e05b042ab37f0ae586b6d3dc2d0dddaa5d6d478b277831974ad8452f7d1c350f3f45d6e5718a489dc8a85bc0ae4d74226dca030f0cda2584c9d98f90cd758374438aba6b8e8fb254b3fdc88e1c71c91df384f9101924000fe99b749551ff75cc7ab4eabc3784e6aa8d8bb1199be37b2939da9fdd03af6e95b6fe786651ed0c4d4ff6469a5281f43b22993240b1a889f9639df2390f7da73c2fa05c583234966a96803de6463cf147dfbc7a4eef0d413c3480fc34132633b05b7444104beb444b0440d2b46181a3d1bd38666b59b542604fb468552a5aaaaae2380690bb699d5c1edfe3610546618dd92a7fe56000bbbd5793870915cc93b6378442ea9973a74a64c7e766e11975140aa5758360d27d86cbb209130df6b5951c36fcb73f79396664713f6bb0604d94697829e159f6b37d86dc3a2f26c2b215e467ce1e0a97aa66e62279df995f7adef7b9c5af963752c0c09c0ae2067d6ddadddf90f70d9574123e4c7368b67596f7240730ac3c8a7d9d8be308cb0e17f06f738ac5577e15112ba31c352a5bb53ce61117d2cd06f727c060fb9ddd27147f9b209885c19eadb7112024ee9f6b6fab06ed826b219270735022c331192a2f0936fb35a2798f2a7d21adf3c5f3939bcec69164ae39cc85a9e349248b9c10bfe6d54edf613561ed0e26409490f33ee51ef5f9d044b24c042215094202e42b1b2db222fe7afe2c0c9de9ef0aa7eff6705f4e0dc8f7c0f271127834ea49fa2aaf6564d92fe931a4bb88379c256c8a392b3e2869583b840677bba0388d2f0c266ce06c1fb8e1947baece02497317a849561976deae07c12b5bde47574c974505a2c06ff719600474ce38b47e171cad8970f41909cc57033b1c3ed929f27be910923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4122c720986f0e8a457d7e911ce31821a17a84e189f1214e65fc658afc020e2606044e8554fd5dad102a724a6e015ae6f1e0e2168fce619290b5754c6e8c9fb39310923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec410f0df20d8bce531f1953d24d0673d55d5abd02add076346475c163bfab4759ac24c0b8485714b1e9ca1f0e2a934e6dfa097b5125ed781c99aeb137655e4d66921e1b1abd143db174636694c8c65763cce09941c851da670ea18e2a187ab7bfff1875a0215d7e23f7d1952a1ac4d7685d28ff3d7462bf941c12a74f6c284848c81c8098e932758c2f6d581a9bf87fd4cd54a8c9b987cdfd952f77be1044b7e3840c7ad81a67fc9a0438425df16d86f6966c21859b1f17cd4c971141e7f1be41251cba32d5bd2f2d04cffefb31d0471188916fd9a41c7fa1cb65b0da390f6e6f5916e695bad3d2f246c11af5e30093179a465d3f4e135cfa573dbaf5992e59643404ffd573f83e383c27a8f847730a586b2cf8e12dbe92b7600a85aeb265b69de7231ce8e34f706b7885fd8b62dd5f96570177f2a075ac2077fd266408a5dd354e2829187b8860994b6ce9e0a5ab1473ef1a68eec678f38e6fb825e14c019abb730f4e3040c5b49ebf6334b648cd43aad485c87b500c1daab458a32fc398ffd369197fbc09419174e9bb885ccb0e319decaed5397ef15ec3bf49bbf9ffc8ccecd72160850deb48ee8ed3fb6cb822915a356070b9ad672006d86d481638ae2efb1108afce943393e083c7c157fc2e985f8d40ea2c39dbe7bf5f4e5d6f0b33e3f6e412d368c5781cb2715abcad92db69fe5a0c691292992b855206a4cbd59657d7a90ec90a8ee992ad06e69d150e9edc3c802309b0a21be9d1134579265d96dd8904140162c7a3d10cd4c4c9cf83cb16f03c284934e61a3e9afa4927885d0444acae05af399c9f9b0b6f056eed4244a05bdb0f39c2e07214d8ee820132c8ee5ccadf093a1d811705d90e044667d982bb5e09511a2ae5f48c4fe739d0b8b2438b63be157f665ec14c4c67922f75ffa717b4294d8eceb24c05c4ee5cd265dd35b1345b2f3bc6ec4e3d3a2399ee808e633edb4af986f5f55287cf95c59584633b3caf0d2f126f60499024a57c822aa22f7fa15c702f35d7624573ee14a8654445c9d6ae0fb3641ecf2b20b7d730a69be204fe7f6b5016a7e373f10d0a18f0eddacc486613c1f9967592e54696d2dd273388b982b48d68858dded457d1667ce13aaab3e717bbd753eeaf32c66a0b6bc67bd425496cd654c7c589061d726288f0e5de0fb712550fa363ae90ef4f81c54cdf214a67f958331853cf1d529cd9a5b40a72c742271ebeb14a918c8d0ec315a111731db0262f89cd798214baeb1b0e49162b0a2d0ea6e91df6ab228d903cae56e2082049cd187c1bb025791e6d7d4414182c1e820885711e903603a1932e1cc01068150277f23c8066f365ab8be2f8519b9e48d125c54a1d99445167dde61f93a47d38a28adabb40a1781d1d990b909f45f691f0102fdf67651d805741c0b58f51a90b4733569790871519f08b5a83529c94a9ba0f4ca0db134268aa74f58eb276ce9794508453827503394bc1d7b99ed1ebf97005cca46a6f75af0eaab4a875e30eea7a61de30d84e20fdddb28cba95edc97ebe1a088825bea0bca131d308f9118ec1b33d591fcb86d8a0b815299f14b12f348311c01a5017708164d161436d1da4dbd8f53b0df3b09f1420a15bfa8d4c15aed60521708ccc6a1e79b81c51e1a3723ffe2662d6d8811597cef215a6cd08614d0d196d28d66950e9fa704ba0c32baa535cc6e70ba0aace0f1df954bceb10825eb202054a2f981c4a69c4035319d8dad66a87966763d67411235fb5e334ef5eaf70087bba0db471775bc664f2b20dab12315cf9dfb285f713f2f03ae93713f6e93d0c71b87f489c6152084ba42752c989b4ae805b5b3b3bd1aa473be63f2cb1cb4c2d888fae53c1711213b494da503a017d141f861cd7ecaa76dac1f2ae25e5b519284edd9b424b48cf29b5a1e5b44133e6c218575e3ea2b4f4c22b075a86b9254b112fac73a96018f5737f888cfaa78b7dbb58e1c0110e57ee4b2f5259226ca70d1a61b5bf55fc53df53a2077c66e7cdd2f53155086d2fe9ff1fd1fcdbcbd10a6d134f2738bb6a4e731855dc4aca705f9333dc5c944c5c27136118e2d184fa346f1bf8585b29aff272710836423d2c90ae2a0b9f181227adb63cc7d84170bca7e21247e1c5c7561ac144548b2a584f57dba386a11fef6f83dd8624a9894bc2b2d72b6a2ccf36552be47acadf481d2a514c58e90dde7c7b176449929d0a546ec41b144da392b70da139741e0647168180c8f35d43f955677510b5cd651b2c60c7d32c9fd219b1cb703799fffc89503773cd6e2d9fef7b393b97c2ef6541abf60b7e0eb49231c8e8dd93332afdcbd72257e2f32f7b50b1f727df6a9afb7efdab33b1248c83db2572c92fdb2b2f6e5c6665c64c345995615bfc31cb9fdc37a27ce8b10916ba9627785dde65acd7c68b5a967d687241fb868a996532551d7923f02f102a0c8ef33e9adf28b7434dfa5fbae17e9362040c6b997030f005982cd9b65f4d14bf3ff2fec7a762779f1b3655fc57a43d0688159cb4679781f679506b090821175db1d0717be5005daee9297dcace6ef756295118e907fbbf41704caf92b5480e97a934ac6bab58ef10708c5a8ee0959edc8c169f75f882c9f488327d914f8000000000000000000000000000000000000000000000000000000000000000002981d29ba891ab60996f31d8708db5f8a1190d0d827e038a8614a62804223484000000000000000000000000000000000000000000000000000000000000000007ba39473e76250c5d40fa530d20e0c1fb90cc636dcb56c8e97d76d7bb895e980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e8dd4d3b23f8f9a862485231b03b3f94c4c6a8ae3b7675a1167b547f670fb2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000295db6035ff0a82d88f31f3cbb1c4429bc4b8faded6dffd5dfde0d9bc643da3b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d2496a027c15707678c9a878be7f3b050e828ec799b06314911cb51c92abd34084b1e2d485e1dfcea5e743c187f4ddb70b8876abb24ffd6e976badc9feda67409c35321063fd4e05ac8823cf933c6e8cfb5a0451067533cd29c255cc0c01ad509c35321063fd4e05ac8823cf933c6e8cfb5a0451067533cd29c255cc0c01ad500000000000000000000000000000000000000000000000000000000000000002b4ea795e26ed222afcdd4d35bc5235e2e2db75189b985a391aff8c58fa9862e00000000000000000000000000000000000000000000000000000000000000001009a4a4f514e9cd1bcd1d987b4636fe4ed2d3798ec6871e26deedae6e07b32a0795f55dd96f74734166876559331fa88d47beb268df8f6713f3eb3afa8612be070f2990487a554e1d5adb1fe9137b8401dbf54113222077843b2f36caacdb612b917d13c79f49697f50fcbf2eac75fc6ca34b8c5c61e92fdd8410142782b3c605d9d19a6c67cdcdcd658e4c4a36e6583024e117a601fe0e7de563e813152ccd1ce629ff0215627196d3cf782b0edf4485ae799f5dfb4552868d62256c3455c411dec0a1d6990e34fb398d4692af17ddc595338593612b91a6e442ae68fd34b41e45773de92f7be6a676a8d4475db389c0ed04d18f999a9b4614f812dfdf9688076fa38c76ef166520d9c6c52cc0988d779f715073d7d5f05d0e9b15dcad41690ebea4a43a2021cb0b31314d36a8147b4f087ffb7079d37e0d0b26e2c0d9a2861a63612262ae679a0deb9ff584c46c4f7c42148eba1af9fc719ba6fb4cd1ccd9050c07b8ace5f298294381449141fd2c84dc20e50e62f686ef8390710e2cb879091e2ff35c68cd3d00d790ee6a2e10bd481130be5c50d517058d62ede0d5367d05b9a9460a752d36f257334fe74fd26e9552275fa8025332e26a4086f92ab3fe1c26f597636d11be264875ad503b29c09df59e8786df8e05816d0634f81b8c6b2e1c48e97f9ce468e38d0750b55baefa8b2c28ee11d315f0e06cd5fca405f22504288c3b3f9ec03c5942f1834c4f40e548d9206725bc6dbab34de7520cc2c7ce058c1e5368c93798964efb8f528b0762640a5e6ab893a18ed2c970a79895ea832f77128c06606519695064c4e4ca208f5e56ccf3fb5bc0030d039aa4af7548e9120f270138f2fc72b3d140c99806aa4f92207efe5712a905f7c89ce88fd36f472ec8b0d25330c748f804218ed42d9a3c7fa29bc51e2acee405f9c5a783efa5902151603a6b95e873e95f79de6763eb805c0af6022e8c0a5d6559ff4d477395421a89f2f33ea570f95c85a7f3fe237591ae6aecd280e07ff8adbf75cde4269b711484400a94dd8609566e7c3ab31f2ea38a9c58410f4a11580ac4d93b118b45182820fb43223175782dd9cc7943afabdaf04ff64b48a69d9809bd33537852fab7269507581040b952f53e113fe42ab78c8d5eb3ba0f16acfaf426f1234cba53801889a31464f812b04be0f6e2569b756209a538ada8246f4a7f3715125131bd160d220856852b85873c3b81a7711b5d8ce0e09ed03904bdf2f525533d94fb7d6a302ba809e1364686db23842dbf06346507cac5c23d2e315dde1f35cd1cd2d2391dbc977dcc5d1a37f28adecb18f76c17c6ef2138f73d008d8a559cd7affe913e204b0233e4058e0e1a27efd703e8e19a91eb321c90d48b5c7e849a1e4b2faf20178ad842bb838d30c33c41b54691641580ca4cdf38f092dd09540fad3a83ed8a0bae845b458f57f255f44d6e9fbbe67fe136bff3865c5498e8a1a269dd494d7d279528f577f6dbbee776a1878b874f6ec58978f5a5adee7fe6527a173bfc57732f4b8d50b39c915108c2a4ca4f78c5a75220e5ebb23a9cb1b59cdc71f41b84dc2208a1cebe58fbbf3bf7371aa145054372a21774daa1a7c59ae89965f09eb4e2204b0233e4058e0e1a27efd703e8e19a91eb321c90d48b5c7e849a1e4b2faf201e5beb03419bacbdcca2e083970e9d601a3a20f79807587c5ff261ad341b5f3d0c815e92535aede9aa0674bfc39d4650545835b6e2a1443cdcae5356264fd11a17b51030f99f9a5380d34fbf32d4e14f1617478fb73ff51ad0dfbb3b5f457e300b6d491fc5a56473c66c9cc41f7b047448aca8d8b734fc66ae40aaf60c918d1f1b372cd02c673887abd954a6913cbde3fdbc9240a967a128c64ed5119c80ea6611ccaeb93b387c1f0693fb1128e30dee2b5f415bd4a1b927fb90db6b1f5ad92e1ba1badfe4a114f332d2dbf75751abace832a6c1b7989bef65fbe761d5aad6b2', 'transcript_type': 'EVM'}\n", - "Time gen prf: 8.045958280563354 seconds\n" + "proof: {'instances': [['ad297b8184503f0131009e1b94795f879c4560a1c673ff814dc0228dafd72103', '0100000000000000000000000000000000000000000000000000000000000000', 'b32f000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x305ccb931c14ad928ce7463a7b1683647c74effb97989819b13a14aa8593aa7f168e9ac1715d2ac73fe439f2584f853dc60ca1d0c0f207041aabdb2c0e30cf1525537d500656ee426f0061f8e65c55779ee46bde2d1bd65aaa71027b3808eaf901721d79a97822e3e7dc34aee2098413ae06061d69fb4b21598a0b2f45b2b4b40190f93d8895b86e38fdb2455a675ddfeba055bca795ad70cfe17b5174f7840d07c3412f6bc50714b16257fd4d0241e33cd0e7c61339494862d2dbe71949c74f1caf0cea8e83bcfa69e2a317f12f5048a9fba76d4373405c391943903f7bf1401a28f29f6529d16b2b52c08a969ce8c53158902eadc335c138bb1049ef4a3390297ca8b25f9a07ab4dc92b41dca136cc5b035634b7e4691f90e5e6c5f87d8d9416de4b72fdbe45d0c38982932c7016fa6d63ebe49d9cbc127be977115f95355d25df6aeda325bc588e40074c87c8ab19f8efb44051a1a6b37755358d1605cbda010a1561952cc70b29718a2378982115eec4127d26a56accb19a42fd84df396f11923ee64c4bb31b2b0b2175242d726230fed03ada69a27ba4c535906f73c7ec0f3c99db6bde9001808f377568b5fd7b44b6c704ce1d23a8fdfe6cee80be1e432f77e89bf9002c74f22d79f6d4c532d1faf3d2a61cbfb9386e50a4f7d7d65afe16fe73cfaf3f98e7bd558a569bcd05597bbef5c75346a758470e7451253eccc316d9764da455f0814d086fd9ee743315845d21f0e87d53a7cfcd157365001d3905f7bfc0ce0244b9f5e6502f32156af4977c2a331cb1ea1594a3d5f5bc4779e015fa960e604bc53f8aad47d39bb99c49af07a7416f5760dd1218e21ec16fb5842f54e046b40720387f505118ec2ea3a7e252a9d61d3fb45b0f8ad2711b52ed6f10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec41285d4d18716a3eb0a188e1f7dfef4d459bffc6178f1dadf9bbcfabfb1b53f44c0aef5e4b020d7c36d4c455ccd2f78326a5cd7b2dfc675b88db183d92eb1393e4281f652e6c224e9550906191d5785be7178dd304b2e539052cb30adfe6c41324223b08041704ef686ee00e93215d1ad3d744149a32864da6d7952e7a3b8a40a710923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec410e75dcb9292e1cb3d29cd571395beb6d11925bb2bd6f69135fa90629201f867100d2c2a43cc31bdfcaa0501b3c744b408aec7cb8398013cdc85809e3a5966da809d5dbe3fe3500420d6ce48b837e7574251c9aeceb11a68d2258e97c1d08fdd32640e39d80cf848cb1b45d03ce93df378aae5eda9f6eed8eb33d4984fb52c95b0196cb5a33dc313026b7140aa4c14c44d6f6ba797bd5219c6d860ccd9c3f43022fac5fadd34aaf37c5a7686801ae4db867bee17060991b6c12bde0678bdc6b4c1319cfab55131685292f70811e6ff8d2bf4ea264d38afdb8ab8e2a19331621ef17024da74926e96742faf8877cad26e9fa533de147d9ad24ca789b03ee162e5e2f8a59ffdb79169bc53a1a1f93247b85d9cf9e02b483e974edabb631b32bac8c06a9d4f0ab947404d01765959d01ab4b77d6b21302ef5037778965dfe84179f8229a8688f7c1058d7ddf60295eb1d3b9576caa25659034471ed6c616f835df881c40a3903c7598c9d6dedea84ea650b224f1debe756f915b2cad9f130f55b3c5161383b222c22d145cdcc1399816aad877c4669fcd8891fc7f7e92ef2c21cd0505e391c171b416fe9e334af3202d866c30ced9a6f0fb59c16a9bf907688c13ae2086597963e171ce88243d39a4042bdc8352c2aef0a3878798e6f8343149ae36228cb27e214548b73601cc917f51e86790142db2e4f9b193134c0ade5771dccb0f8bf178666bb91471a4cca6ec7fdc70baeddcc96d066284c18d790e869faf6206adaf9996d09aaf0a5f1ce27e0fec12e25296fa6fdc478d8ec7c32f362cebf02db8d5fb35669b71fe7ad403c57facdbf7294a62b86dcdda4a63a92e40ac00cc28f9ab55e7d02c73c348ad4335427e0f39f57d0b86102a8a652e76f3550cd729244d24df9859048015ed67477043a37715156e6db33977cdbf8fac53201facf30a5e9fb410ee52b2b68226cce20a591ca3528bec8d26bb14d988f1a3d285a22029ffc64220448a479eea12c6fb5e4fbd993312dfa189e14dbdb50cf02fef52680ba2ccd7d82a9c61cd8494479500d6033c3e9fb9e69ca764bfd2b4c6ab6600060e2afe1b67a52634f3a1cb64c672baa0180eac41a9c692e06ee957dcfb6cbd7e041b5ef82b94040591532843750aae02815de56f498607ac1344550aacf902400cc025fafd73ad3dd0c8fe81ddbca6c6f04c684daed6c3ad86f4cff189b78b41236e98e5f3cd95f20f76ed85a5e15f1f12ad36fcbc3f2a3efbc13f898cf78d522580df9c14fb18b08ca354c68d601fd45a0686a935961908acc94754a6e21a1d2c51e19bea0a98ef7881e453b856f488fb20aac6cc4f57ddf34c7ffcaea9f63b2d557118e20f943a7c598f63caf616c6026ece6756c9594ca7dd1ec44f1006022e064e1c803fa4fbf74ab44cb33d15945d903af12523325ff42169e7268a127212e89b7cdd15681eea306726464e8e4a0d0d50e3a9903dd41e5e78ba4350f42c223f57c88b850b44c5bce257e91ccd2448b3512b722a070790aaa1b528d39ab630375efe1b9c02fb61cb74e43114910b84f10c23bfff59b34de7077d2b476aae22c4b4bf6d287b4dccc7340c78dde6f8b7d0170bba9ee860c074e177c3c7af3518b5b1104b66a60acab967f888152e3e5e232bd87d02e940214b9d30054084d909e9a04ffc03f548f3e2869e45f4da8461633073405e7b74e63ba96c596b1cf6125783d479dbbd3eee6f0d7f3666242c9709a43fafcf1183061e5cb6bb462e5026313ce3083815272e248eb780611b0224fd8fe39456735babb03fa5c95472e22f08f523c62924deebc5f887532e5732017f87f4b9841af02f528b09d485f43f25bb9f0e8962dcca03b34a8cce98f851e01704aa276b0eb5729d4be246b6f7370f19bf778db6c5a9fc7c56b20d15c3c0d344b8e45f0638e7bc858e28eda43f2d2036efab47d0fe7449217076497ac0f96d9c40ffced75f3a14266bba35ce8a401e8f94d57e8ca647d4a107a7a70f3f3fe440ba0b9351bebb65d34f919ff0f32d03448921bbdd74d3ef98ab66a4d320f2263ca0373ebda13a6ca4031e74c330d22d260388c5617ef6790bf0e7bcbe29169af8f903c10e52343c38077978f24cbe1aa8db6b7cb37910ea73ca5dc25651281e379085b46a8d376a69029ae76a757b0baf66fd6f61ecc04d32d8c6d24408c4e52c6df773df0d96ebf92058764babb205176a09554a7e7cc5c79cc97e9026a447af26f2ec9a4c5fff7dcec6aaf27e0e2296ad95cdb80be9fee534b05a27bbd9abfbd9e49501c10ff454cdf2f28d325c1e18ef762cb1baf04858ee0778ef8f8f3a4644e07e77fe5b8dd144c23990a4db1c18ab1c23b444da67cb5aa84d7efb0f2ea6a90685473f15be9ba01f3ca18d4d0e93c3f77a30eea998c812072f7d4fc2a8d62913f487797224f22e84d88aa6e903b5a3f0ce50d02995402c6b397bbd436c0717832845c9039ac7fccfb1ffa10f16a7a05405d81a9a58ee7bc32566a2bbf9b45a0000b06bcfe5c787d97799d30226cff5727a7b6c80346ee1e2504b818687810c266e879577ea359cc45a83880c158ed8e3833fc3fe879323c3c2bbbeb1394dc293d8fa5e3cfe05a5a97f19facb26275f78f91b691e191e509863be7e0754d7491da5a2126564acab7b429fba862c0a2dd62d4a2b12f9d4d754eeb7a3782165b563b0d29f565792a8f86e7906cf00000000000000000000000000000000000000000000000000000000000000001907875126e66f710aa210d9c90acd39d82f04f1cc55b22eeb7ade07d65df3d003308557a0b73be5261747c7e165bff38a8e9d65a7d947279d7d2d47f81936a900000000000000000000000000000000000000000000000000000000000000002efcf7aef4f3aa1aacd6a11873570fec6d11028333be6611f5b5a4549d1329b92fdfabaa25e0cb66d9d26e5b05f5360163d8c418fb42cb776a770d8a8e4ff13b2617ee2644342e3e7d2a0c5dd7fd4d6f70a738a2e6bde0f9bc1403aa98bedb5000000000000000000000000000000000000000000000000000000000000000001c83467db568b1e44c5f7f1d0ced766586823407b24ffcdeb39c23798ba7354106ae3baa6cf53b5c4cd05c665830a6c55aad5a786836ea50ac0924c42f36b68a00000000000000000000000000000000000000000000000000000000000000000707b4f5ae1a8982fc2f9c6f6a4431e5b7bbfa244d0792b43d6ff0b8badd39cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b90fee440e2f6dc3ca86b640d4c2cb239bbcb241a077d496150bd25a548f0fb0c4b0b760792a3e0618efe16a384bf7a1bec10fc958bbd65aefc8a17ca9111c6d7d514bf37705cc4eb6191e1cf082f4a351c3ccf0150f98c1ca9d088c15d6000000000000000000000000000000000000000000000000000000000000000016ee55a105c986e757c73947418f49c18c695b5c759d027350e6dff0391687592fa77a864e6a89bd8962603e90b335750ecb799f77398583120b79fcb6feaca400000000000000000000000000000000000000000000000000000000000000000dd957b79a143edf111a71fddddaed2ed49f88657d40b136fd89e547a3efc3b71e9395d9fafac7b3b98e345a87670ef311201f97be701e72658a7ed9f4b9d6fb197cbc830b7ac010a4d5651cffb55a93b25e30e31cb34fe924e53cd2e28c288c1a12330c0e2a76f5d3e032efc978235f0a51c9ffc587d9f0aeccddb41b796ed4211e35cc96ebdeb1f71c584dd60c5f07600a9c476c2c2838344a332f0df744fc0b0cf989f11b2343c1384f3a498238eb8287b844b0b94bd69ca2724d8d1441a3128f038bb8e17e306d828d42af8fe0039cc1d484169b7b8f0d9be1a3bba806732352991f41af165da638f97b7a62edab47df1a9bb5689bc5d77000e744e9615a04bc3459808ed213d24fbd6929af949ecf26874a37f09b01a15b81527cb618f3239c14a4ab09cf9ad7c86ffe0107235a52464b1b78cb32664183a68784506fc92d0fca6273084b42d3a8bdda8a8814a01780cbc5907949abb8af4d17ffaa185111e4da87265d9e996c29aef77ac41ceaf9f6aae483be84da686d892713d7aaa514893ae59f99f85fa5e055808d84a7c01c64cc394a17a9d1e82070f9f5f7e36c0e571707fd830f678b201a15a5a11749c9e3274bd5afb2f50c616516072c42da2377470390a30d5224ca16fbc1e599ff9041ae748f76a56eab7507e447738e78279d8b2ebd5fec60be1cbca17c431713c816a4b2f41da891ad7a1989d0f6289c1d0dacb162c0316930b3391ff39afe806c57a8e08ca4e22dc18c8b59dac7ac62208a77f9e554fedf1aa5db3f7cdf05487d136bd999fa263812c41aebd6d633632f0fca7ffbd278103cd6fba0482ded07748b3d3b0512423e977c0d0727ff08bb1811bcde29e9d38a934659cb5a102f58d5b40225c5da9573a0f72ec7d3f79888065a6aa19f265a19d637b9c81f2d5478b398de028bb9b033063adfb7244176b12d994383a9247debcd99aa992ca9786dda3d4701b02b1f3f6e6bd26d659efad10f3e2930b7ed178c9a33aaff43c22fc48a51fc5cb1e5bfd7f6a1f727a0cfc3da30604d66ccfc7732f9b3ca75558f0d524e0493cf1eb6e79b912370559c3992461d3b13d0e7a96d468d44a20606d0237498367271947970017c02b4e6089279572db678ed9bb5797780e2490413cbcb8c8043b58be1aa9cbced63c7e0db85ca7504652b9425b51832628b147e2cbf2350d5a57b9a58a7630ea8b0b1155fb7c21b2c84b20cd784c4b85fc65bce8e435c0b5b3cfda439aeebab8f297f8c1ee7c9e00e58e8b9c4347850a202edb8bb1b93fd07c15434dff8927c39853b5d70f48b821da452e60c65aee4e4f71936a79a3073b92166e700d7908ccda9f819335e92130eec042bd6549000a6bffb28589fd9b910eeeeed990834d057fe47572d772f0c2a4b28a91ce399d134d7de936f1fdabcdcf2cabff84a8c0c3f6803295dacac1400fdcafb8c65874a431dd9d7e37f8d63fce9db2b22711bbaf753e1e8a16e195c054b8175c564caa965ca9417b1af40ca56179ecaddd7c8aa1fa1000c55a4f274016ea29684fea2375d93f45a435b39d550e7f3d38c2692f4346fb9e40c5d180a2a05e8eda529425a2230dc31b76fd60eb839eb8df8254b02c56da42ab0b749e92c84b20cd784c4b85fc65bce8e435c0b5b3cfda439aeebab8f297f8c1ee7c9e02a10c0f46cc7b417beef00fbd8ee8f1b7f5758f1f5e842087ce109effd7359c81b7e7d6daffa56e14ece0654240be40a8c4fe5ab3d1d6c81cfe67ed27b0231ae137d3b882d34f139df96dba1efc7b11b1d215ad7414df40695edb5d53fb8a37409718ed17017b4705802741e95fa0df3a63a68b31fdb3b9c9393ebfd7414db7524b6978e82fb5c34f38a1a8be1f08256d3bb21f67750fc849eaaebbb66a91b2a0bcabdda6fc99768399b472739bb3d214a25da862486af98c350ea12aca9130219e0e008960005713b9144a73be05ca46105b4d3e9f6f6d60656f867e160b45a', 'transcript_type': 'EVM'}\n", + "Time gen prf: 8.429817914962769 seconds\n" ] } ], @@ -246,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { diff --git a/examples/harmomean/harmomean.ipynb b/examples/harmomean/harmomean.ipynb index 115eaf7..14712b0 100644 --- a/examples/harmomean/harmomean.ipynb +++ b/examples/harmomean/harmomean.ipynb @@ -2,65 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "python(43647) MallocStackLogging: can't turn off malloc stack logging because it was not enabled.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 13, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -79,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -88,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -121,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -133,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -144,9 +86,20 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], "source": [ "# Verifier/ data consumer side:\n", "# since have division, scale must be very LARGE, cant use just 0\n", @@ -166,16 +119,48 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 7, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 3 columns for non-linearity table.\n", + "Using 3 columns for non-linearity table.\n", + "Using 3 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "Using 5 columns for non-linearity table.\n", + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 6, param_scale: 6, scale_input_multiplier: 1) ------------->\n", + "\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.00217247 | -0.00434494 | 0 | -0.00434494 | 0.00217247 | 0.00434494 | 0.00434494 | 0 | 0.000009439253 | -0.000048048183 | 0.000048048183 |\n", + "+-------------+--------------+-----------+-------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [6]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":6,\"param_scale\":6,\"scale_rebase_multiplier\":10,\"lookup_range\":[-184392,11264],\"logrows\":18,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":911,\"total_const_size\":4,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,6],\"model_input_scales\":[6],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Recip\":{\"scale\":4096.0}},{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":6,\"param_scale\":6,\"scale_rebase_multiplier\":1,\"lookup_range\":[-2642,3600],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":12624,\"total_const_size\":3312,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,6],\"model_input_scales\":[6],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-32,32],[32,96]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709725137745}\n" ] } ], @@ -188,58 +173,22 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 8, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 25.911302089691162 seconds\n", + "==== setting up ezkl ====\n", + "Time setup: 1.7187037467956543 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 45.21875\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[11712583131456230033, 7998639690917952521, 17628064685104548320, 3364894255067083796], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [10409296726488761395, 15557203226960814343, 16692342436085548322, 2420882828764455196]]], 'proof': '2deccea5835cd138662b01fc5d10a983847f69015420993499d62bff137dec7b1e177255ff696c06524172ee1716ede8089af624975f894e21580ad4560b8e8225a316b072f7a939d24a007b31c15b6c2fbac7da2d2638083186f8a5716e7e4024f1ae907c216cad86ba0efdb467ee5883464227d979b87894b7f50b64b9dc7319fc4b8947ee68fe3c00d64012380f6c8f5f8cdccddd1532ddba660ee6633d0e19bac10b8485d21f612aaec0ec3c79133a15c45e4d46708a06dc507af065b6891a51e15d7095073a6131ca2a7389e9804eb2c82ebe57dc5bb1dcc720e5d8a4d028d29bd40913b577bfb9a523e3f8b9c6e08ddb7fd2d9e9fdcae0e0d5f742a49b0194530171682c571738837043aa6802def5e52e7a2d7a8606db2993badc7eb5031eff3ad8a2a4f19724621e6f7cca94bc454b6b84e0d36c651a61c4b8e0086719725982afb11367f81e4f13126cbbd25a845865cf3d820aa04246b16c24fc232816c44b1e00803f51a7df4fa5bb6d7c0ed4696ec6d2aa670db6ae138eecb2121f59679166a1b9591e2893f7da24be0be52b695d787745272facd811fe293af72dc23998d4a2e529ae526d7652765ab2a935b8db5516fbb6332ed87602e988ae2670e80602d9225f658aad1092ae4b8b0e68d96efbadba4e539c6a974cba86920551e2528b35d91a81d3c4f4d6642c30802d429f44a5f936dd170ea8dc62fd922648f3fda01d1d3a59bc666693020b071bf4804e63561e49fbd6df96352f85d92bf1072c8dfd1ad7d3bfb80cd9232769528f7368661dbf1bc2e106dd4bd2c5512e4a925ac8b888bda477f1a0bec17c60f7fd9deff90ef5b5da42cd19e5242dd02994f7111e94254d0fb69ca7112f8df35093369740610ec3f3ffa0c4df7206700cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee9112163c42b0dd51bedce73f85af391ae3f0b1009bb1f1068005f7d6b2d3336c4d11681f239fff806f28f7963123414727b5ea6eee5891263e73d16afe74af381502013e1d1f540e44d404230c3fc863f04db52683e5c3e5b46132f6269d29ba382c61bcef4397f1cc9304199f71408b068fef11763af91d203049893d984010b326a2ff9adc91c0cd928e6304a2519792034df055833af03767bb2944e410d8f01d5d36d43d7876918cacb5f1f07c75f06490b47b6e07631f727574444e064e540cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee9117530a0ce970b887a019093d149d1887f0a084d417011795e790738a44676bcb0bbb736368bd1e7f3132fa60039a56104cb5a36ab80b4f57c60e42a2282df3b415eb30322318e7a7aff59a5a4cad8d665b804b9ef255f7767836f6c7819cb79c0fedb80afbf6dbf521e14bad92f85fd3d0e6cca604add7df9180ec82567fe5ec089fcbe68ca83b9a362e5dc27c3f4aade87f03debf6a2f673793290e096105b425063e66a01bc136b8f51ab8cea4a44a4ab49e9e98839e859b17f678b937b6e704614c68bdb375e50adb79ff248925425307d1fc822176585dccb5475160297e120df6adfb87949bce7e6177bd59f387be73a5cb773b8f29fd5755daac59456515885787c4dfd6ed574388dd47b8c1b5ecbed08f48f8838377f1aab27c76af1d2725031ed2d7d40c6bebd756c2681f37bda05e6a172eb4a0a792946c4753892c061329fa93a7d564a361c40b955f1da898b7b751a58cff41b42c975e0b84664018b1ce5a0243f1a4ebaf31d54e1f5cfaf10121973606cc22940db9e57bf0ae4b146ccbbb6b7668e52b4d6111b39f64b302d7c4787c9ecfcbae5317b710ea2f08119d69659e617f2c49f7d134599b66bfcdeb1fc73bf60fc849418152bf638a8126e3971f8ee0ff20dcf55c74c4d2ca3383e53de3a9a598b2081470612488fa9d0044345fcd5e3de8ed8fcbe25c7ac2910c8d91a57979ea283fccb237f498f0bb248c2c756eb1e7e697e6860d501e04c7fa2321a09ac3f4278857035647f2ce9e2e0d9f9a9d41f6c89b8a205c43711bc889bc1c8afa9907c5fc2e0b32ffd7c88a2daddffa48fe9be57d66eecaa6165a5f3f544d445ede5af6f67383a647072e181b4f7336e72cc20e64d5c276231c2c85d4989aaddc32bd65e77054d0e19f977c06e0486dfb6f2d06daa7ace1e32090365a5b071319b288139c9eab7bcb13759507c2c9d95b2ccbb8bdea9b6177ac1dfffdb8a91876f8a538754b3fef417a906317c473abfd3de8a2ce40f495c39a9be300559b899e39e9ff1b25eb24ed61456509c0e7629ea568c117f6381ad30d269ad8fa2262b008fa9a0e4696db848afcf8078c568b691d737dd64bf8bb95c3d7b7a90084bfc84dc2aa3e1891a3401db9bb20e99245d60e14764c76a524615569de20f5c2b91833c67cfdbe89288bb8ee1e209e63647cfc88bf24e2f33f5ee923e7c059e3ba56041d6d2861c52a0d6097fe059882ba2f998df75f84c5a504cad86bedcfbb7a4b326f3effce4ce9d78954751943805b11e5dc80ca91d4e70648354625d64d3cd4af1e64e3fc9ec2948ece6107e423ffac67339b54dc23b289d41fcc5caadc357c5d6975c8980aa0cdbcd1232aefa3bfa05c93d3025667d166d5113f42bfd0bab6f11ad0471683eb00685861101d9e93353223ead7b858c8f039e7870752397f6746f36880310521fc204385224d7dd8de644c7e806a37f601e4a1788416d3bf793483a6ba36b53ef57c1f1d2691bfac1bec14d909177276fef45cb7b1175c228faa9f49a79bed27c7e8556e1501e517f831d696555051d245330b5c76a7e9c1bde8b59345aab59ee6f09f851f1c70b29994dde0907cdb12a3818cd4e9bd4bc4f61cfed63ac64d42de45ce912fba73bbc7750ed46188493594117ba2e0d9bac4435e443b3120941d1bd9805e25cae5c313bb9225f70cae407f1ceaa79aa9727142f3d771be0f3f428aee39611a7104346211e0d67c0678aba61a70b7d47cc96107c037c6158c8e8026c8f25618b2b30589b949e220122ea5c08dfc4680a6240cab40a91c6a97fe7b8716a27a09a2b228041ab8c73ff92803b374728ad7b5d25c4995e9942e046eefae5ede611051fe0eaa937118faf0de507b6f88e8ea2f0df83183736fa7a3cdf0ebfada0f26e501edbcc37459b6796c8492b93462306447f692699beaa9154c7a633abbb21e47a3b74609d2a71e4ddb438369848d0b190b0abfa1f87504cc54082c0486d9071da505b1666a5b2869a13092e7c3365e84d6d8a1e89893660e1b425d6ab039151b50f0d913cb266f4032231b90af4eaa391a10a5947b301894e2d2ec40aba0035eb4086a1276cbf424a0c883a0b329d5e5ae89610536e60002e78187f6e75c2cf71e0d0f304882218e690638aee1041ccfa4336a680d7ed748467cfa46e38f1197ba18ba27fe6311383144a3efbfc139df1592ad51ba13b48c35f2e550e2f51f2b2074c7e8abc05847b507d5be821a185f19e18e3b26bf38d55803ee1633552f2a6d9ae72ec8cd10794e2980a25fd0467946e086a91365420db289f8abef091725b44261fefdecd87db9406ef87349eb35f50bd31e4a668f3c2990b1f581bf23c23acef4ef1f43bdf1d73fd2776335aed215227b30c7bd3ab5c7c91b989c000a8bb04c71f0557b84a2d420cb4195edfbd3edf1451847e7e542b286605b38c60000000000000000000000000000000000000000000000000000000000000000254d495e1bd50f8f0a45966e20f14d59f13c7cacac89c87bef388da05e53fe24254d495e1bd50f8f0a45966e20f14d59f13c7cacac89c87bef388da05e53fe2409acd86716f73c79f85788416d975b2e58e0dc0babfd591dbbfe7d1ac246fd4500000000000000000000000000000000000000000000000000000000000000002954ce4b06ef7ba2dcf31b50db69c1a8146362bc8cbcd65c4cd47d6f9c5c58421967a1f314ea5e5a3fd2aedf0208412154a6e92c2f040499e33c7ac7c80ee3f2216b50958c696f27e5ac0dfd77b2258b86d06aa3eb6d49948d7448d5a2052bc91a00f9793731135a7f7532a057db4851665be1c6c747d7f2efecd6dc45b541780063ab5db50c83482b6874d334f37d0648f6b508435766df5aa4477e4d1caa02000000000000000000000000000000000000000000000000000000000000000000b01a6bdb99ab229f402992a710870bc5474a81f076804e0776efc3b291d4ff278078f3209f0709f97cdc5abc5d02ce2d9e7cbd2c3ef6c40c845e28f27580a81387e515dbdb5f8ce36f8f2eb6392320e64c4ccd5c41d76aede24603d534e29a2484891a932433fbd7610b5b234fa34c19296e5313bdff9a6e3d31b63f2f1b2917bb6b3e7d194feac7738b94d3e90212190c4d5c503c5dcbaa748202c1c2fbb93025981810ba09bae70e7a4b1fb751a8924e390f077dde93d2766624dea6d4d30282f76cde2fa67d12b4b62ad7b52da9227d68d8b93da621431b774da51068a12292116fcdaa0fc0424c91575168aa87ab5c3a5551e22118bd5bfbb288b335851fc22a02ac06cc4e331af5d3236c1fdab0da6d84dddf83bb5aa8486f442effdb2ff0d439cac29160a119ece3d296a6d0bfc646bd1a17db6c17e7327a4e1e0f6c2e7cb6b08ae297d0f1fe144f844054fbcf08511b6483d1cc06508bb0670b753c16db608b959c088e58cb56e1aafa2cfac83643163ce25a75713a8e7141591b9d28dc90ca38885ea9b110c91b6603491e1533bf466f859e265e9a059cf3ea56632ad0d042acb01dc078b42f9ab88321929a99de3170180e7e7f2384c87ffe8994088e9ee775253d3d0f02536ee0b1cb1896f2735575a786d0ce3c2fde365819140fa5a356ebb9698b6cda918ac2aad0501a3eb4e6e559d567d06f6870821bc792283f736b2f825104f134c8d5ea4ba0123cb836f2bda0369607f18f4dc1d607ff0b919860728814f27e26a2fa15b77be73ea2246a8fd7474e139b2d5ce23c628c164abd8294735575052d39b6e21ad009eb3bde17acf4b9ab88e9cd0293a3f07b14f725d70f3b3996400d131ff698dcb058a59489fb2b84d313f9991f8553e6042e79849daa0e1bb7c4f34f55746b8e7e14f07cdc38c927d6e52f6a265b5b61f50e9cab7d2ab9551580fc072cf40c8a6d002e237f1837c1f771571cf573ec135518e0649aed241b7f8fd8fca1b1512c6ff1ac709210c68c61d6b1e821cdf2583f04bdac993b223f628c85da505c411f0d898d6abe3a131d34bcbf9e56135b826a0bfdd9ebef22987e932fc2ef3b6072cb857c6a59f4096f9fcf2f1bd3635997220c2e236f8d3fea99508343558da0eaa12e6e1c3eababa6709e1cd7eaa99585f701ef4dcfe5c10d3fbe10020e9dbfffcdc5afa389d7ca806e66a98326525bb28307e8fd95495cd94ba8d99733e3b957ab4119a3a8901ec24ade7ce2a53afe547927c32756b8ec87a0137280d7a1e14ac60ca75d78cd3ecc3e44478964547c9d181c41d0184ca46ff12b9f52a1752d93a0944ede3a8f0c8750f29d4d8fa1d2efd92edc7142760b8a1308c3d1f0746d3fa1866dc8bc698297da7634ea4ab65f0d9e1bbf02d2ad05dfff1e2322b3a0aa0b9947840d433aa3b57c36220155b33f96d3084cfeab2f0bbd1b5152fc8bea811c4b7cd74e7bff411c9cb74b8d6dde5bfab41477a5b73b752851c70a14843bf1ce0f6ee73bd0cd812a5a4ef5f12d38eaef3c030ff2a7e273614e1431172e3bd23860e32cc8fdc2b92f0f25bc6ad9dbe591551643db433787bd2873bbf2e9ef4fc7d8e66662f9802ab2befbda6d0166a677ff2d1f7b1a1265e2db300d2883a9f40395b8cae84078ff4b19c94ec3e60a6b941a20fd36c86b0e9f9f34235284358e23379ca278b049f2c9b40fb17c63753bd36700a43b62b6459d3ffc2f4e2f70286fea689e54683b369baa9054e7a4529dd1100eff760b4b081aede6e81b2350cb9ac200bc16aaef47cde3dff5f08c7d4f341f27c32756b8ec87a0137280d7a1e14ac60ca75d78cd3ecc3e44478964547c9d1827ae3692cf4ef40183c9fb9694bddbfee41b5947f06544e6644d771e22592d8929887f553420173a703fe1cf201c5cae50a54111031c500301c21bbad8dc0d7827d877bfed070d6dc152d938f3105c11fec951fec525bec531409b9694fe45301cce2afaa3aecc6891c403102c621007ae01d5cbf99f1049b889aef4bc1bfd25', 'transcript_type': 'EVM'}\n", - "Time gen prf: 35.821518898010254 seconds\n" + "==== Generating Proof ====\n", + "proof: {'instances': [['c371c58876874ace4444c2f2683e0d7bb7ce264f49872aa6deab40635ed90f23', '0100000000000000000000000000000000000000000000000000000000000000', '4e0b000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x07a929a3ffa542c7a53a55b55576a854dc8438504a2a93edea9764b0906cfd9b19127e395a0e2fd1f62924304f49e16c978182bc158c00f3c8545270870f87e40327d3700240fd6bad65ee43a921425bf6810ef643b6c29df3e1da69085c7539002008ff8c8cdb95645e58459cda33cdee83bfe510bbf5b788cfb0ee17c75193001a5d7483a47dd4d48e21de9d0d3c7fa3851cd512243f55a6b77d03a4fcfe8f1bdf72a349549afc4cf86842dab2a813af0b788fc7c87bb3bf580426da50fdd12c42c1bfa4feede0d7bd400ead5e7bc0fca2b08ea144408deaaedf7fd3babd5f03d13ea26e0e7dd6f47cc969549764c18e9ebafc4538cdf48a60e757a9be72eb2bb6ab651efd075ec49a4bb1e7bba845357be6a43e3a7c2123e3d410ab2d8cca20b7e0cf070454fcfb599d63037f7b63935243d23c4dea3de266080ddc3d984701f624ef2ef95c3e00b695ac99a629c3798f4807029ac9e2eff70b033f30765e24d595b9b1e2502a2622cfb278f6d5d65fda51b93f0deaecf44f8dba7b9c9ebc17304ac3694cc2081fd87ca5b5a115f07890af9296992fa59f46cd3f54873c672f3a648366893400a4d7382267fcbfa098a1038674a642fc13b01a4d162848c115ba278a00d88330d54b20eb11fd8899ce743fe536689236cf60c07cf64edb4027a939b366933241c82685ab87b64f8e8a49947a90a0ab9716a0d680dba059101c7efb1864f44bf91111eb4f59bb6c619ed6b852363969a8c8a7bfa491fef5da2c600a589ea72ba208f391075db7e67e0d12d2d35efb8ea786dd2e815ae93b0f09189fbfbda9eceefbd5a2f961bb07c316ff927860779cdea1923b7b0ef5489b2ae00762956ee52bda2d2a05f3ed3060a8476868a4bd7d7856dee81f71e717f7105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf70717b324e93f68bb645836ad658bda96a889bf75313f2bece3a21b4f7c5f6b4322cf8777920c7546b743cfc081564928525b20376d4d447c43a583d997a6d22b105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf71802b89e965f1892b5895c700a537cc7fe9ff977c3d9b71afc9c78c6f5cbf1b106532dc75bb9060e3bf6e8646d2c24fe629079ad8d0f12de76040f70775dfafb0759280f3bf3b00b665a631e56d6120035f85356a3e0f658ca60721c19e2796c0549c8f5fa8c0138d0a87a64ca60916f87fccae57c2e9037dbf4e697a155cf65285d97a57123e4a3334134c45a02f9cecbc15d1ad422627967cf4ecdd32f13bb2b344f51927d82d347285041472292d90eff6b92066c76d0ef7ce75090a0abf622746f50253d765f218b8ba59d94e5ce2c9651b29d1d4cdc6add4458ff2ea2c91dc320107b5711f58fa0bad1103e3e64cee92530e71c16ba2a82a25f82b9b8983005377051cbf6981910752d5bdee9e5f69a053a5657c237ec8fed6c98bdc0dc2ebf20cb5b70f4eb34fcaa84009490a83ccfe5685143b939d17fb2e710f03f84104302c802f0a63db02a4eedf1009e74d82f995dc4de4bf0b2b2df76319d2e8e13840819f850b0f7a589fbc8a5519942950ddb7de9a73e1e9b5b09d9771075b206bd37365157b06fc91bbac65807acdfef36bed4feb78a4100acdc92756f0e550c9ecc7dd09f99f03e89a0ebb531e23e9607d671e3c6ce8db8948b8d1e5faf4c15a480cf621396485a973c74c6e998e28dc180f77a5726853010fdf93462f53f26a86d823ea7acc9ba822700c4b48661ac6a6e2ef7488831d886f3a099b1c90721d50a79aef5ce75ba9385a5ea7f788d04cdd7a9eaad1a9e88bf63b8ed4a65c420bb37f46ca08b6a191552e2f3483d0c217646e3b6afafe2538f6b82259d9f7900dcde98998aaa568fa78829aef4a5ec05558783a121e34a435b73ad008c07581a95106c57eadc8d137d192530c625a4d7b789ca81cd7b7fdf4b74d45f4575630e76e458cf28c060d09256dbdbe6a9d02b158f88a30f615124b2b1f6a9631cb126e0559247e1d466b65db7e190056c3085bf757b6312290150fd7cb492d6cfb92f5b06b22f239e813d4c1200d271dd6756634fd9b640b1dcb0349874f8be1b9419eef00bf7d7f8d16b52544c56adbeb5bf1b23928dc2c88ae1a146bf777037d2281a14502380b7cf1be8c2973cba3ff877091af5fa2f89705a85988d226b8aca08cfe7bcfc9963bc91d36e0e9f858b9a854526c2b2c0b186efa48f1361b2f37a0af574f9025c3ad8cddb272ffd272b2e56ff51cc306fa9a2b1767767a362f7320a81f140b2e4374986c81d06aa3ba675c00c8570a250bd70058c5f6b80f645642b434b6563be5085d0a84372cfd5a832f555bd845116f648d3fab45ea5bf8ced2fecc86c73ecf845a651b2c43e9890bc7990e4a88bfe33bc3b342744d4f556382db5b1d3af9c0f51016f2f92a2080b2d9b52f0adf7bdaaf10c7fac8d9e0526a22ee022022c8ad99724a7c01e4f424a58b05ae4b5e735b181cb7f6e6041815d7d3006fc9b079d7e901a50f3eef495f30cc2f4b57b7506e73edda8f11fe5dfd36a1854d6909944ea8c116e4bb5eff268abc2adec253fd553c159c9ada9cc39819324a403e81d1c4adc6c32a26bc189d88812d9b50ae6fc8ddff9bed28ebcef19b7183c831a02ce3703c6aa3d045cb874e8bb915fc963106613e62ae813d5e228e4147d2e7fae8a725ac8c195512ee4be5fd0833f91b88709ae350d52871caca17a10cae6564e503fa4ccf93d22ca8b7f35a2c8f3186248b7ebaecee2c1f84796462d7440a61970d554b04a4f9e432e4f6339a04f3d16b73cd6c15764070ec95b6c1035b7a79d9eb41636089985dc525223a0e8cfe575d1a0405bd5468af744632e14df907730ac7c39e58959019daf7b7e73b968f18f3764b9849f6f2098bcecc21e704fcdb7916cb9a7f5e9ad9872172db33a746739fe952e4c32ee83ca6ccb3a08e6f84f79b229107ca59020e2217aa76e391bd6f5ffbb9042b2f40fd055c200163474d267fbac22faf9705b9f0535d4f4f30ccab0424dd41775a515c0e85cc81f96e95009661f4230e44f59100d59f20183cd611a96d9c26b43db97874e22fe2695465ceca0ef34d91aae35f35177d98f51b0d140e52ab6659f702b085641202960a2b77efc662d32cbb92aedd6eb9fa6a78a843e379ca17e5c4131acc5fdd020d94dd9107f3738fb68547377f9a18df687499b203240ce4efbc443d16403022ba5411ca12f68949397353edb01be24a6783a81220481e5f4e036c606312a1c0ee5873455ff979a693e409f954db7e7dd09e26049bf4dc52fe65267f909ba71190fe2f1507f1ce6244d63c3a62b899b5518bb4bf87bbb6609cd59e3cb58e532114f15391690b5d3578b1b3bea93af671c91df78ad80a21eeea8503e9372f8910bec8555d24a759c4e66fe95e9746ac80ae8087abaef4b1a8ba3617f40b0dfe72dccc4363a70da7cb21d7df5ca1a25a6e901f2e70bbe72910609565cd282f5cc0faafd4815daac0a445c92e7aadd4ed9b6c49cdbe6ea7397d0b6cc8197e559b4228da1f7e68eeeb398e44a021baabe480e70e8d78b666146c76dc80cd978a72f1d455dba3fafd591642d88e9d0f6a15da1c1e07634810d1ac77daabdbcd8c0d41c76895be332f4b030dfef83468174a9b23b55158714b097b247f7485aea951b2a5c0d98ae205402dcf1c9ddcccd46d1cf87926cc797bced4552c4965d8aeef215b0ee91eaaa082ab6c218a89ad7ed3dd248e97df258bc2037338b550a26f80521887d44b17355dec0766471c2b9f647ea7dd9664821b06b2d4db4a1cabb10581347d20701c31082a605b8123703862681a636f0685dd3c31ae7366222ff92230ea2510d171a1c252361c1ac36a74429eda96685cea295aca9ea647f0994d38a0b1102f7a40a0abdfe87de52b626dd95354e38416a14d37139e3245f445a2a562e1d64730a13f159ea2157bc199b73455e5b352cabf45c444b2244af31c2ff971ef97e2caf7047a578e43aead46c2a6841c6ead28630c033162cb7b76bbe04e6142ad60e1037c208d8a9020a63b16613d639d3e923ad1c3ce5f1a281c20bf0df1436362308c3f2c181300c440903f568f28dafbd812b5d78667775f0fefc9c5a261ce2fd3e540a6157beb0792da2cd0d470178a886b10dae5d6d550b4919f3b329257dd30beca440dbe02ce24fa3a7414d5fe2246605f39e3badf603e685b38f2c6f2f4cb1fa401477414b033e0fe44e08635af6131634552744370d6cee2bcf00000000000000000000000000000000000000000000000000000000000000002ab07ff9c8fadc25c145bbc472b3cc43eb373e512ad6c70abb2a9381b765b023045e030856c565267b31b206129690787d7efb06c53c4cf15f9a4d12f734531e00000000000000000000000000000000000000000000000000000000000000000e06d795331e0a07b1ba892a5dc81b2a93cb604ce32e6daa56f920ccd6b927762dc8b0e24e8c2fee2631166315e4c6b27c0aa1862b7268052612f05c9a7666000cf7b89cc66d1add0186ff64daceb67f61a31ea5d5addefb7b06662d68dacf9400000000000000000000000000000000000000000000000000000000000000000d93b65009964b0208dde1a87117d5ec09a777ec90aef7826c689108f17aff75045e030856c565267b31b206129690787d7efb06c53c4cf15f9a4d12f734531e0000000000000000000000000000000000000000000000000000000000000000083a322b8ce284c3d309f95577a28a8a5cd8486856f6367c176192bc08eb383c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000265cb8343c73b6f0a8c4c37e3928b1da37f4b511e198b2ccf3ad276df0fa73e31bc30a99ed3b2c63dc9c17704edba32218ce3621cfbc6a9ceb48f53ee72794c5148bfa4a0b8b70b1f3f6b0f92094cfd2f68e86d763d8936bea9a3689a2658576000000000000000000000000000000000000000000000000000000000000000010e2efe38b4c589b7ecca7df7d25f528425b452868a13ae4373b1a1e9c470d5800000000000000000000000000000000000000000000000000000000000000001ce304fe3dc7d01598fc2301ca5fcdbd51bf2f9d684fceadf665b5c33624eb1d0fe2d747120b7359f35b5e4ef1b7679c49694bffd98541aabc0fe02ea54734580badf6d24c4b974ba1df28173a2db62d6a0c7380d8a283ca8df5e3f6ee80c4b40badf6d24c4b974ba1df28173a2db62d6a0c7380d8a283ca8df5e3f6ee80c4b425df43a6244482d0cae5fed5b7b2bd407c12110f3a09bcd2d57aa97518c50fdf2f7af747658c305e914c465841f592629cf063590d7e9d195e043031ee9c4b9a0fd6dbc4caec9f483de345ee31fce5416504ca819fd357d6d153de87d5a75b0414624c039a4470cf451a037e93274d2c86db4c4039724b38434a08041ec818281bdbeef29c4a48cd08542683bcd16a43b772aea3d0251d1a99844fb22076a68505d2e2c0890a8dc6988e1cc45e26962ffb8329abdb90f39ba7bdbcc172d567f72e7a567406e8cee10a1f4650403250c3345c38a3e96478f4e78080c8454d50b90e2cb8405966e30770f510ec7efb1354cdc79cff589295503da8178295dcd9cd04147ccc092c0b55438f510eb3b0142d1b84e4f51fffd5930b5d268425385b8a0735489261fd1ba59512e7cf5c20b317ce32632465b94e7a6c43494a58e1f4bc0f0e0f6b3d510cb84f90709df63fa91083f00ae4e2e4de89f350b70a0b4dacc902d827da9987c716cac706a2f02fd1b2c9b499c256d1b1f1a0341a0e353c9616039be4c0d6814e3222f06094d827407a1ec256d850cb567dc297fc02d1cdc45f1d16f28912c5f50ca91f7e4e3f9a72b2ba237d9812e1ad9871c45245cbfe2f8210e1bb6389ded74c65c3edce9dc781f4ac34cd7bdcad0adfcdc8389fb20fc23f2afd78c8e5564a2537c05413193b43890be66e94f117f9a59144ef7d3ce6f983218c725c5f0e29d4b6ce84f0d04bb7b6ac0acabef8afda3c4e022fc0d0e6b27e22b76fac04a1f0ec08d3ac935c7938cf12a9114c5d9253998ecd735407c2ab8b01280f818131eb0e1d0e1ad77bb8368d63acbc7143ac595b53e135e2e00056c515842cf30d81113168b43ee3ca925e0d2f1cac2f3da6326b23c85823d90bd49e17f4088986afd49b364d444be006c5b8be905f4075b2e0dcf353bf2850955cfc1b6fb0478c9729b9223a3f06040ba65a8e3d07f179a4474ba00bd4ff38e8c44c23941dfe0a9fdc0d758c76d9f25793b4581bf282aa2a905c6b1c608c706021e51ec972f4ce28325876f458352701a5d848ae1033d6f8863a2788148e6e01fd851ab83746cb9e15bf244fd54f234ad88ac87379ae2471b7872d744cddc1e258952482e7281f16ddf9f718e5cce1e1b7b901eae59bb1eec9df5f395cb148934f1e158bcb54d548d28f8aa822bdb4be4cde8a3284bdf35e16a6e3443949f118901a2929a76b82fb7ddd1ae06a64bfe4f2bf1f5517c1e586d876c4e546bbe04e99a417138b584b3ed855e5604de9479099d2ae3b308627e2db05c3d118891c3e24b5201e8ff19c44313ec2e90ed71ffe65b74ca6d41db30760063172405baefcfac8270e1847734b7e24372c6e487f8f47d198a4b546e53934735b286f288d855b942a51b196820237eb9720bfb48e642c210ceb7c0fef056534ca580a00164fe696158bcb54d548d28f8aa822bdb4be4cde8a3284bdf35e16a6e3443949f118901a1ab4c8a8e61a6e0473b43bdcbd41a9354b04dceb9207478b3bbc4daa23cff87e2a77784ff644c79bd9a690c7c3b9e0875e747bf362f284d2fdfcb7aa9ee01a762b51b66404137da4edd83407d177aab4cfeceeda1c6867fe7ec921a4411403b904b24f798cac25e58e3b2998400a0b6aaa69c99f92de0e087bcdcf6a8c82a491140ba1073c95447e3d55c4de3f7bb30420e7efbe1cd98f4866cf9383f9c0800b16ca8c33892d7c0c85376dfb700c591b3172efd0b540552a0cf23583c6f33c6628807ce858c9c3e5851e9399387c586ec2cafc5e9effdfe78076dcba100515ec294a8c8b0fbaaf7e5bb9afac089a020f300bb038bffa8c30fbe5d68bdea8f6052bea04d4fd61db155ca3669b92f88e9a15bb46b65e37c338381dd99f43bc05a5271306bbee5a6cb52bf892414c549bb97252a99157fab148b11059c227b12207152b535c1a3c244e390e01102dfb6cf66afcfbfce9d395d98be0f65447db45a21ece49a7500ed0843ec7073eeeef131e48c8ab0c1d87ba9d6d5a281d3c375f5c1658ea8d981589b88a1e7a60d4c112c460cc0d177dda862b7e20f6bcdd8b090f1cc7c5e809540e537a2a765dc76dec054174e163ae371ed24c7baf48f2eda8322ef1c8d78ae526f53e383d34c00499c5811698a38c50e661336103b40468f60a0f734b4495f684b6177306a4fbd5f11ace89c0abfb784fe5e7fb768d64c765c0', 'transcript_type': 'EVM'}\n", + "Time gen prf: 2.581162929534912 seconds\n" ] } ], @@ -255,7 +204,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 9, "metadata": {}, "outputs": [ { diff --git a/examples/mean+median/mean+median.ipynb b/examples/mean+median/mean+median.ipynb index 56e529f..74559cd 100644 --- a/examples/mean+median/mean+median.ipynb +++ b/examples/mean+median/mean+median.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -128,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -140,29 +89,29 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "scales = [8]\n", + "scales = [5]\n", "selected_columns = ['col_1', 'col_2']\n", "commitment_maps = get_data_commitment_maps(data_path, scales)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_43756/589984064.py:9: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_85214/589984064.py:9: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " return s.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n", - "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_43756/589984064.py:9: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", + "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_85214/589984064.py:9: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " return s.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" @@ -188,16 +137,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_43756/589984064.py:9: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_85214/589984064.py:9: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " return s.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n", - "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_43756/589984064.py:9: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", + "/var/folders/89/y9dw12v976ngdmqz4l7wbsnr0000gn/T/ipykernel_85214/589984064.py:9: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " return s.mean(torch.tensor([out_0, out_1]).reshape(1,-1,1))\n" ] }, @@ -214,13 +163,13 @@ "text": [ "\n", "\n", - " <------------- Numerical Fidelity Report (input_scale: 8, param_scale: 8, scale_input_multiplier: 10) ------------->\n", + " <------------- Numerical Fidelity Report (input_scale: 5, param_scale: 5, scale_input_multiplier: 10) ------------->\n", "\n", - "+----------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", - "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", - "+----------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", - "| -0.00078201294 | -0.0015640259 | 0 | -0.0015640259 | 0.00078201294 | 0.0015640259 | 0.0015640259 | 0 | 0.0000012230885 | -0.00001584626 | 0.00001584626 |\n", - "+----------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.003124237 | 0.006248474 | 0.006248474 | 0 | 0.003124237 | 0.006248474 | 0.006248474 | 0 | 0.000019521714 | 0.00006330774 | 0.00006330774 |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", "\n", "\n" ] @@ -229,8 +178,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "scale: [8]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[-25268,25754],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":20992,\"total_assignments\":12490,\"total_const_size\":1222,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8,8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[20992,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450741807}\n" + "scale: [5]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":10,\"lookup_range\":[-6212,3220],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":20992,\"total_assignments\":20935,\"total_const_size\":3242,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[20992,[2]]},\"required_lookups\":[{\"Floor\":{\"scale\":2.0}},{\"GreaterThan\":{\"a\":0.0}},\"ReLU\"],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709716877850}\n" ] } ], @@ -243,7 +192,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -251,14 +200,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 5.530666828155518 seconds\n", + "Time setup: 3.5495471954345703 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", - "witness result 1 : 49.3515625\n", + "witness result 1 : 49.34375\n", "==== Generating Proof ====\n", - "proof: {'instances': [['c2b6968dfce66ece687a00d15dea969a5dab54b503c9ac9d0ad01308cedbb32e', 'dfb9f22d8e9142be6a825acd931b1e936e0f99940f77141cdc735127c1c44016', '0100000000000000000000000000000000000000000000000000000000000000', '5a31000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x21906659bad4d0bd1f21c493dd16dc615fe51ce0ad39f73b32c680b4ff7dcf17099dfaa9ded6e9281e79ecf93612f100cc3ac175f9ad79a2e17dee5e523bb6a4097d2c8960e34e36a7b229113d4e0dbe7893fa1064063298e0af499186f0f165128e6901be7a964d76324498ebd51c5513243b0f6abeda7326f674d41c5999e12cd739ac2d52481d28d0bd89699f9ea2b23e6722173458ac285120f0a72ece012dadd5b316451ee9b4e8e5bf7719b870564594369b522df202f1c4900092e4252ee16339d9058db1a5b8b3ae344d935ec6458267cc736fe4163442c4595677d51eb402d0e767e2c2a32ed5bb4edd1ee1ac306f499783c6010ee50fa0d86353191287b573d579683eb411ff75ed14a43099ae684924bb08b7f1df08ec556bdafc23f397f813e6b2d2cc85ea4f1cd78178ddb9376784f254ce26922fa421b5a55203126348b7816617e6d1015c0d05e5a9a902108ec2c14d5c6ee4ccaab902f6d306aa50863ef79d01783498bcb9e8b1603b2de1d126d6ad42d726fc07913775152005a7b37e3376c6532b5301e99c133044506ef27f5fb40c283d5d14bd9494122a95817efc251bf01144380a1de3b71e62fed45c93ea6c3c06424827861b25f61f1b471c4df0277e2cb0d4b003744891b5b83882eba764ffc4d3e9752c823e012b4748427b339dea293847385e189756722f957099585044808ae3b15a0bba552a83a9b3a0768a17d6e8d430294edc490487e998847f095fc2625716557c966f22fc80306b36dd4b3018f102f4d70e6d9bb6bec39cada87c9e9538cfbeefe7080ede027763754ff1c18a8b182d650de0f862704a410544f74cfc10a4d298526f1daca5a5c4f8a09a40e0474bc248346a19f28bc508b84c3ec58ce5f7076cc04c0ac21bde38b34eee8138f734ab05edf0fbb83501a7f182baa0978134f9584a8922c537808eaba567c1894ede4351fdac9ce41fccb5a443d7674ca2c867bfdd4a2a18f62d28660b14454bf512404f3838b0c44828a13eb4b689bab01a9c9a585706f357c88856c7bfd19aed5bca4e410bf343f7664e4d5a3a33db37d28c95a0391e4f0c6b3b2bc356875ec9280b0f0893c089a551caac558ad0b54cafa696b2e3002b1e6e51ac929b56a1b314dcdc488ff87cd3c4afba8e5046b557985daa1f40170cc523f9e971adf103fa5118e230f4f730317ec5e17abd2c2b2dba89721f8e2066f36cc7ac26a370d14187d36a2c9dbc3a66e8124f9d65c25991ce31ef6f3422cc26ffb779e29fd21b0e7eada225dfaedb617fa28f0aafabe72601a8ef2578172f75ca1fda704584c423eff71c46a753bfe1c4952a8d9920633197cc636a282d26490496b8bae39101950d6a9350dbb45110e14278b638b4aac2511777c0140e5a6c61307ae055cfaf8f5fa40903e47ff7469f97296bf72ffc6b9d7bfef85c0ff9ed0643ed030fa6b579aa37ea7697bfa3f946949febaf052245c7c2b55f300c09856379c3aebdc56de9e29b49bd780471e9c68144181dd3db2008267aa2fb1bc17309373408ab69d06bad349b3d06e2e4f418f92882afb58593a33f825a5604a9fae540513bc69654f3ef2fee34b69b317291a31585e5f129719b12912d0f24a2ffda5c7951d1ea08cc476e8164f50a9109407ec33841fb4fa16ecbd6d87a16e605b837c185ecf15581674bdc07a5bfdc06c4c59195e6e5486396151ffc22292c990d84b1bb170d920326a1a9da43c426aefbe3bc9315f1881ab9417a3b7f1f537eca74f1e85ee380945493f62be84a370d95bd08f30e5bf5e78c05df8ca709267b8dc3767fbc24c0d9f11d555702a6f8d2bffd932acc30a04c88a50316bf01643a065525fb4438aed2e481a3e14c72615951f341e88700a417981d335ba406be670a56275962ee5c0a7fcdaf498af4c28ec11f45621822f14d6d69f69374250a2e59c53ed6a0c9483da75d274a8c8a58e87000334bea5b3843e3ef4907602ca2c23394358a05e1c379a8f283b7a38e2127b04a29ea14c48fd7d2d08c060316da71c15b62a2861af9e5b74c2dee181cfcf5d68a5c5d3fba20b01235d64b8c07950317f26b80ed2529257ce978e7b615e31b231da4f141844036130bd159e3101cadd9838f2c42983c184e1121e0d70f531bc205205c30370be3383ae4e3a122438069fe593bc53b6dd716ce4c98d67070420ef70d2e9618c277a4139b67a80248d7f082127119c329ce238f7889cd60194f8b04fdb5cc045cf80b7f2b7d940656160fb25bb5ddc49b88c1e3092309608709bd6acdde58ffef03fd10e35784082eb4cba46f57a59479b59d201d140b79f93a08e1bb3a9110ba69a8ffc2ea7911a7e70d1ced49ab0e2224b3f8a756afc49d19497da838b1791a6c919f580d8304cc2012713d0727c24c0bc87ca6a9760a37a8f0eae4e2ab14eaf0f8348ada0914d41e9279cb0388845e9912aef00c04eb0efc9460774e6b53430307597a546f24004c23f054a20886e79db5dfb327d2928900b871b96bf2e6bd04bb813535a122415a10b7907c8c13e3029e4ea07e2a8e04fd0124b0b8f6e04dbc12880330d315bd2ad4904ee1a36660f7781eaa76257639e4ea92413529f4cae16f498401be205718859c0dd70ba26451c365db9c1742922e02e643090fb02e0e96ae4eab6010ed3b9c8133bcda26e136ec356f70dcc62ae3a40e3c0d0f8e4456ee7e1caecf07ca4bb561bd5f144e536924eff60ab01d7fc5f0a0091f29eeeacc026761abfa123bf736d473b815675e78ed6c0fd874ae914cc4981576a52bdf52886ffc4ddd285e00cad0112f5634ffa06cb491c8a33c23a7f896c49d893fa9f4e93f26f3711c800da7e6b447997d1b84038e82de3ea4b6da1fa3cdd7c80c76bc53b7b91b4f03c1d15148947d3642d4048cc3d22d2a8ca5c29d538bfbddf51c25a15e89a6a925a4f28c6431030532b5567ac55643ceeaf8a17b9fb15c69671ddfb6c81a4e2a151a5c58c5e4d00708df6a8ec827d27aa905ff6a804896bdc943b705db953dc92401ca1ee52b955b49ce03e9b2e1a2168448f389dd7dc75648b6512da949ab9500000000000000000000000000000000000000000000000000000000000000002f12c2d64396dd21fc0ef454398eefc3e2a0a50513b2cb7593d2e139fe0fac19000000000000000000000000000000000000000000000000000000000000000020922ac36b83363487b4f475944aa85af3b18b5d68e212ec22f5830d397d1a2829d44ad255026af08f6987966e95c67cdd9bc99db9a46fbfa39b416455497286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca51212b4833edcc657301cb894d56fe7ae96ecc980d5dc72000585dfb7383f1b19eca7b15edeb0dca00c8fdfad8e243fed1766613b39b2e56575f783b37c79000000000000000000000000000000000000000000000000000000000000000023fffc963ea151cb965c64d208e39d142b11002c1460d85e7f3023443c8064e415aed6eb2d57a95b3ad3e6a3ce0d15e7043814f6174cb8610140c0c4407142b0000000000000000000000000000000000000000000000000000000000000000005716602ace15a281d2af4b3d78a56cc40ffad3331db9537b138d0e86f4394300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037001caa6cec335ba59f9ab24d6802e6f2ea8767cdd3beeb0a4d36f7ffa09de2956383bdbb081412e20cb58bbb8ba806b6e197e1ae5145c2376f8e0ab25c277147ff0b1a8fbf49ed9c3c9acee4c0342587a31e36e8f0520a6d83d6fd09a5c3b091695f7e16a0d452c3c86df150dbe4f64a321dd57f8d3b0dbf757c26fd85d341bd134d4f92343322893db9a9db3d5915c06f306c0eddf1c104969564f942dfa1034147569543db232706100b931e3e96fa96fae61c73e535962bdf14346aaa21e027e557d31fa5bf9db9b637160e4db9eae74f4ec40313f70cb2d6f0d960bff0085b167be602277e1fdbbe1b6bb8cd2c67effb063b6807deadae7321d2c926c1f3465f80d3a99b04bbffefae1f8fc58898c5791e68bf621fbbbe5429c9bebaa018b3b65b603eb9b49d54c46e687fc65cd98ec47ab57426e1d83c247298ff99615ac7cb7bf5f72d87603bd2200ae991173255cf6d224bb04df6c6d5628b8f8cb28d60cd451de3b03a282c274b1227e2bc2e1c76c17615117f4487661744fc3f41b6ed825b84c20c46918a57188c995f93f767c4c6c3a20827c4915e4baec191c055a8bfb5577cb7fb2e93418300d91811143c1d701834ec1796a87f3ffaeea7e20b14acfde1d241134a9d7981858287b6ef3901742d1ba6042794fefa427073519e24222d28ed130589c243e495446f995a7dcbcfa2e097c9bb36d124b09b6762715d33856a2a4ef5b498f225550b5917778969f108835895bab695436c78ce80490d0d5a0df46f2b47c2f7ef5ec5889395764f6224997072d3e96ba918e506d29813b3cd9ceb52b43369bfb7162818a1854518791c8ae617db013936a3fdfa72d355a49db749b958bb11545ae033000762731f5e6c294c851bcabedf02d881000e65acdf72d3616f939eb47f050432ccb81dc589a586ddcdf4b3a0d1d6618680832e486fce3d582c332e7ec7a00e1d2ed1f481c727ab6469e440d0366e4bc8d21e1e82a0e650c76d6fc96a3134c80a196098572d90ce1fd6cecedf4fce1c240022836eb8b6d830c75ddd14950a7fa57d81836d52e818ab718b1bcf23e82c35b11ef3e17a7913ec7b7d227e8d9d02a461947b85cdeac20575164924e69b425ad2448fbc05e82bf88fdc43367b474b777d4e67e99a3592c4b4da974f2c9c7658a19de9b0d3552d105bee1e4989d65c5d7680a9e2ea0c2fea194778ba7e1eff6212a0e21f4624cf9193e85415e10a4087a9e80ade37c1d5c4db1213291030192d0164906d11cff588e2978717b35b915df6bcaa6266f07d3489fb31daabff6f0912d7c846b89f8f032812a1b35034ecaf762a2a0d210418460bed0e753d50276a720103b1e125b1ff126707af0900944838946aef4d9dac4589af6597d23767f1429e8dd467929bd69a8e19845387eb504586dd3f00dbeaf67b09c5c528528effb2757351d6b685144c7145353aa19bff54cd78622224352b614085e4e268129e80eb0ded1c31ef95efc97811a51fcc86547138fefbfe0b753315f0489e7ff815210c9f7c5cb16fcd702e1b4ce9c3ea2a75d6b87d62045674b61d28adf3c2bbe19', 'transcript_type': 'EVM'}\n", - "Time gen prf: 5.668032169342041 seconds\n" + "proof: {'instances': [['02d91b6d36d8287fa18398dbe41fa396b3a2bd53aba2288c7b83866942c4ff1e', '19879c7f545b79f54649cf9692b2ace73fb0b0c526ee5251aef63bd64742df02', '0100000000000000000000000000000000000000000000000000000000000000', '2b06000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2c09c7217a6e198df0dcf3843ab416c31200bfa6e991c8c9b917283830c47dbe2d846ee55af934b08039154f749e09b111b5c5b4c1776d80e466a1e9e1e0b7042748c549088c372d16a2a54253f9cd9e1aa9a74d9ca4b29946fec6d7c16e83dd1b0ff077f88879d6e05fadcd8c207a6810a8b9b713a5d82a2b35cb1155bc5c2a10a51f0e6024fe4aa38cb22b2935288fe8a70aceea436a9dff15b3edb8c6b02a1d61eb7de4e1f2c1b5e0bfc604f9982718a9b2e701d7ad636217443740b3a8a4002197471f877287deb64065fd22897ac120223ece4e38bb63706eda402b89a00777af56a6be31b8b62bdff07ff6ac41b13ca62f7312c3c3d536d30cfa8e2230126b2ea1c8299be9ace03511773b64addf76eacf800ed8a2f8ebdedf9705155d09e8791e1c3d361f615627c4296bc5fbe4057ef96f2ac214bf694739d768106b219aaf5f53cc5e936c54ce30c8a52016b24b3b3e3f0f8f2435b12a0f397b24012c6ccfcd16f75cd5a672e22cdad7d3616f53992a31f3c905e123fc23520854640a4e23d927ad5969eef62b2bc44de3a2de07f9a8ef4595d46b2aa62a005390f51dcb5f8dee63a41777f33f9db29cda5d88b7d7fbf44c1cddd10325fe72f79ad601eecdc7562f2bf38adfd87b223cca2944c35cb616d0607d1ce908e65117f95f2ac49eb1dd2ed3a6e85dfdb6dfff53c5841196aa053430524ac0184bd97889c71479c7cec9a723e9e48b8510ef40b448dee280515edcd42f099affbf934a96392844c37b59516238d20da128578f14855413658e184b9a178a0da81cc071300908d2fa65226b0e4b54ab6886b60d485d3bd91287b67e9962b3d5673c146ff2371d055421de586da030ab6e7b10f75bfc6e55e26cc9a3a0938808016543474af208d2fa65226b0e4b54ab6886b60d485d3bd91287b67e9962b3d5673c146ff2371d055421de586da030ab6e7b10f75bfc6e55e26cc9a3a0938808016543474af216b7e41b6c1ec5649894b70df778badbc033c71f5c95b619b757eeef7fb67a55295efca3018ed2108a3b5fe6fdb8e4fee2f14e2a816dab5b171e4acfe4b63e6e301aa1b46bbb90d75c5cbaad579d692dca7579aef41fa0bcd186ff32afe510e81e4025c6f96ae0dcec9cc38ab55d9f268d1b7066c6c232c28bdc2b0e95b17adb25e645d0d414911caa6aac53929ba31ec1cca68971390960b6b193b171c0fc242d1ff1f0fd7e6283db1f0eee81cbb4a03f9d09a853fae4658c60bbe6b970fe231d3d8d00040bd42ea9fa1172aa1e3ae5498d90d9507de5958c50a27eabb709be276522b6ac70ff216f03ec0d43029f4cab792b1b5b8e57a4e51fb7c20e4bc27204b23f913f70b383480fac7fd547f1008afd803d32dc130f527e6a1f9635a51d0736824b024fde10565af3cd8904075836a8f87f487f9f6fa9787354559fdaff04d2489d33ecb60d224e0005a0c5e1cfacb0e7a351c8849a5b4e20f829ccd05f2ab53e60f0ffb68753b14e9858fa4054fb3778d65af991cfb89c4e79f61fc6e828b971af63adf22729073da82f3d50eb6c08896766a1e2ee8a100364c307791d28674827afc0e1274870b7e88b35fbb8286a02cefb95b84a7eccc9d097fd3263245f9b25415118bea517a644cdf395962a76e0b4ef5f9a3545ca851261ef21321492b52c98b9208f2da9dc69c52a7c818ed530ab7ba021e21595b983af80deb60c7b7c21a5c3b871ace3d584113b911459a5357eda0869eddca96034e052ddce08394f4a87b2979dc7075aae0967af354c3c38809dbf2e3906c4af8b969a09f708ec15c95ff99fe5cf25b331786a4ba6ca2f38baa48a5c8758ae7a1339c34c2209bfacd8410be6e740e42258926f4ec7722fccdf5db2f4b74fc017a7e96738982b5f7b4e7f0ce2032627684c6ac6cd167bbe83b4a55cb955a64a12bd7e07a3b0097ec5d6089ebce30c35dfea4e940e80bbb09e335254b4cdf1a35dc4b08dcc2a19695de578f6ee19221672b60f847de0baf6e90f5b6a2861022ec93677ef60d125a5bc91106dd7e6843e95ed0d6377cdcc5e5213fe56dfd1f1f4e9d9be7159922037c5116366b4a7ea7c4f65298a91658b8bd178bd019001f2eaf1609abc9fed2973794d048e355ab662afe185760ac537df0e15b2e824b002dc4ee4b076ba652adaed6a29b03e3c2d2f61c1cc5f3602b5561784e257461ccc480f0735c111e521531356b4096bc5aa54c7810cecb15bcc465b398debf4331e6c28cef12f7f730116c43c4ae9206a9e5cf5b1facb33911f097ce1d2fb49049e17af7b737cf1bd1b89c85be4fdc95d19a313b0d7ba21a46bb16cc1f6c02d3b38c9bd1205270e8d1fbea6cb226b59a27f4420432ddc50f26bb1e2115c9702dd1823cf3925a375e124e04f36626440748cc66bb5cbd4da8aebd57bdcb04f04adcdcc3c538c4d06a92698e6e873ade338a1b4a916cd67f6c347a30f86cbd33c44a8ff3f0006bfdaa428ba50cba2c3e7a72dbbbf2a148c5bc66f6b08edda83309f123ca3423eab893f22f5c190ca5c7138daeb5f0cda459ab9b7ec620d62d3e8f8f7933b76606b34df0bd054f084c1bacaa635c93ba6e32ec8843bb18149861e8c47ec4be7bf6f42820bb3dbac2c49f9deba3ee346bc1c74f89ef8162c204f8afdb1c089f4849d2d562c72be561988455a745440ef2f00be0a000e567c5f41814fae05e585a48e0709291b9e20d73f65b8af217ba39a903d06453c00bf9a8490f70f2915041a1a973308ccda87bd67cff3d7d1fff0dcaf48eef8a3eff0788c4a32d2d5aab6f378d97b07567c67febce37c3adb702094eab465a889ec09e2c7906dd26880cff6e71c4326af0c94dbcfb47ed6fe6e06fd4b1cc0795de48f028e7fe98cc532f0e6101a2f23dd81e57881952a75c556090b4392a42393ef6faedf02898d229c4d4825e3dc219e254a38d777b8efa4c3b2af9b24ec49f35908545b2b8ad09024f25774f6231edd508f471158940fbe7e461c4b2b85ac0ed43ed0a6514fedb6d240387cdc67148571724c01151e454550b0ce753720a841a6da2879afa765738bcb432a745b013469568d82ede0d3adfbac5a64de9b0b8869326de340a4ab90a2d69d68500014ab5980bfc7f58032e84756e0471d3ff1087729992e3b5e88044e5446540e9b22dc352ae97d53d6d7b745aad802870f12285868773c1c461c4b8fae06c9e36f2cd7b16e8814254ade3389f314dc956ec96d0d28a2114c1cf7cd2021a2ee3dec0b7209dcf654b00c7ee197924528eb8ab1648e355b160c92ee2c4042bbbea70829bec884e9a3d5312cbffbc446fef148414763204d71ac238883238bbfc4cd7623808666d9388cd28e24ee0c8e61a9aa1bc4fc77d7644833ccfe517d642764c8023c6b31a61c8bbae109336dfca971dba068fe46504fa87fa279f34e180ddf6c0ccd5e3369a4b2130cb18698b75313f493c59b77a9930c485e3a7540b9d07e0a1a35e1bd8bee45a735edacbfbb70a5fcb78000f262ccdfa0527bc6b0e9ed3179159f99ba42b99672b87a6162d1232cb82adab5390fb8fcf9335c0462313cc64100a3cb69afce22d7b8f35cacda06c8cfe3d53efade294f214b70c38744582e88046f47ddb7aa866af3832c9042cc70ef32130ba802fc53a4a6cd1dcf9c4300c32dece922dea84bb2ff491e236e81737395dc5aeda7f84e90c0f11b9b43110c560628ce629ac0e5471670e7713c3b1dee913ef354b5704184639f4cf203ea722e0eadf7cd8897200b389e5ee5f526e57f291665b923db50ee23d3a585e199ad39168b9847ba0a9182bf410184e6a7e673a7083c1c8c7be0b0d652c44d5649272d0fef635675cd58e3ad385aef749c59cdc99be700b8a8cb1d276633b17c922fe014e686118de15ffaf29f0299ab59832fca69f435c08da9ea4ba540627f8dd418281a4200f2a1992ba29d3ffc11ff5f5887b1bfa1615dd54a3e9f50acffcbe4e100000000000000000000000000000000000000000000000000000000000000001a20f856336816b014de34609b28db093cc489bf05c4d0f5aaecb883bfbec0121b39f5d5155cfd9c59811f7055790f8b3b06e00e9c3a5f677deeac41a0ebd3f3000000000000000000000000000000000000000000000000000000000000000029ae85cb8168ef5317046c28a5834ee6ab9a46d7e69629a7bec1639d8f9b2e2106905b4c74a4b88221533865ca95476e089108a46050246f33505e95c3f2849a2e60cac07abad039469c1dc94e9b8c8589f88e0a38eec7560bc19a77ae34326b0000000000000000000000000000000000000000000000000000000000000000071bb860d17ceeac4278ca2191d192234c8fac1e20790ff756e7d2b1e0f24f332c78001cf1723f61043608fcf86d7580051194c03f190e27ffbc36386cd7809b0000000000000000000000000000000000000000000000000000000000000000191034d586ebe1f76e1e7dae98a6ca04ef71b56f6a50f0f9bb2947a19ce243e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001527f7985d9821bbf84747ebaabfc596c949f4265c31e0de9d24e00c910342f70b4e15d4cfa7cf3d06bb2a3edd5ca4ab670d39c7f4c8b64ab1316a95008ae10d1630cfe39414905783c7d8837977a775bef0ab1ca1a42b03c649cae9c46a91aa22b80cd0df71cc369dfe8574950de88b9f071c6959875772bca731fbc81cae670819d87104243cf841949bec4908bb50d298474429a234af38e011f49d0366381272cd6053f04a65c931cd0343bf2085f84fb9e3a6726f97dd7488ce128b99850567e9a5a619839b64689352dfc601aeb60ea459b6005aeee829e4f8f2dce6070b1f52a369ebe474cc1bbb96c869cf87f3a529a3948aa8a45534c11614f79d841ed73831ff426fa4d1167cb1d744691003b436ff04c0bfa70f09b3d908d73cc40f6b2b1eb4ebc056102f5fd54d4c6a10feb140a36bf14393fa01cf7dae4b6e4120784db780780f7bd6b66de2533d7a1b8a3373bed4ff7b92bc5eb6531478d8222dd244e010895dca5563a3fb5036706e5330a9dd96b96f2e5c529762f093593610ef2b077be328bf1a1f00c84c679c0284165898d92c93b8d150c4606dcf0b430c07bb2fd509824615897b89b5c1f02eb3408c2d0a258e8c11c9083167e170a92acf856b8731635d2d52e3e6af3813f12ba01b1bf7a03d664b356bb1babca6702d1de4a71cefb04d9788633ca6d3cca1fc86c29a12b0405eafcbc273b3adffce1f878db53389648fc3d5e714c6293f0c0c1b96d974d9ca17e2384a6d62a86f2b23b073d50b8455588dfc19e9d50fbd895c1d93c5dd5ad3acb5e45844ae78af0a111b234e66f01c50cacc024e7d1a712ed764f1147b48c1a7b46f7182952128e7253dcf7f7d07c44ed3dd086d6022100e9af6d289b6b69041c7646631eadd8878141375cf991043cf5ffd67f29e716bf3788dbcecb9bf5502062b0c6344b6f3241c8799058276621c72dd758629c45ffeb2878808131853e0dff07391555c3c2e067147855a4a3be35946eb373ce684c5fa61bc4e3b052fa8016c353a056a979d162c5526efee751293530a04bd208591ac042d385f1ff5ca6d9a0b699338eeb00014b7a99b58f267ee8391292313d1e173f66ba8f5bd69dfec44e87e48fdc4aa2d70d86d8c0c843448673373649f32a5110b989f81871bed6b5ed00aded11b330b65611bd5e2f6d9806b787fa26fe68352e836df8922c88ff01732268a2277341e218d9e15a621f4fcaa96bdc6c6b47cb3b58228e579411428f95f9519c5fe3a24d3142ca0d8b8e0eebe66b532c7f633f39b6522493ac264a0ef6e46e58ccfec030d8fb290221831477672bf91aecdeaf6d0578b726f30481f8502adf6446f8b12d87acafc1881b4eabcf3345deb372e2c594c176300e14cc039203552b78e7d23a9237d3f5e8bec4389116a35f8fce27f035218f8239ea144373f88786a15562fe9a9d6b4e9ca5b9784a013cc24d1812075d2dec811df27e3a50b0458113db020778c96d7c7693018628a9e0db769f9089a52f93b6f189d5880de5cf2c1e4d023a9237d3f5e8bec4389116a35f8fce27f035218f8239ea144373f88786a15561e9fe76d21443c4b1fb8e27afb973364936bbe4e29f823cf9fe737810e721e1e04b2f72e8f6c54f91fddff6127a36aa4de2363d163710929a718b3057b974f7a09bee46e4694d69f3a8daeb74f58979486e73fec987053f80723e8bad9d008c2257fe7f44757d86cfcf9b1a411a4abaddd9af1204ceea548292fba83c8f9559d0a2ffb5324d454dee5b551799a1d0f01be716a28d9fbd832fa1f58eab72fe2862da8d66952e67abb2509b5a226f5ceed7b31d8a194b728f0446b43b3b7a905aa18cb031d4f993ecb8944be6789972762709fa76887678c5f15a48f6334995689043cbd26997bad9f283a05d62613c22ebc53594ae35e188c7e14da52d7578d7811fcb809668b77d9bab5a8809423c07974b305ca0e11a88829f3d74950e9d20a0ec0c6bb178969270517e9b6b7784d8ef575cfe02e61622acb94d0c964c6c8a720375a00b23927ed7e79563a1afe785a05d078ab1960ab7928171b1d965ed7ec166f5daa693e230a23243bb690a02e0180164bf2d601f537e94cd892f13ea6d529d05b1af4208ec3a9fd931c2ce257e8e835649dbb74ea44b64c417e1a4da3800600fb1958e1ff7600b8936e51ad93cf9a8bf2d416b2867ecce4fa9d1625b8e40372f62075379a0ace8af9d3a5660e0de72944475c2cb7f618cb5a213f00854716fda66d43db66b397d2e5061a9368b7bf7d8485a8111f93446ea9ea3e8adfcf', 'transcript_type': 'EVM'}\n", + "Time gen prf: 4.714978218078613 seconds\n" ] } ], @@ -274,14 +223,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Verifier gets result: [49.3515625]\n" + "Verifier gets result: [49.34375]\n" ] } ], diff --git a/examples/mean/mean.ipynb b/examples/mean/mean.ipynb index d706104..fd20269 100644 --- a/examples/mean/mean.ipynb +++ b/examples/mean/mean.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -144,28 +93,30 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "scales = [5]\n", + "scales = [3]\n", "selected_columns = ['col_name']\n", "commitment_maps = get_data_commitment_maps(data_path, scales)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -197,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -206,7 +157,7 @@ "text": [ "\n", "\n", - " <------------- Numerical Fidelity Report (input_scale: 5, param_scale: 5, scale_input_multiplier: 10) ------------->\n", + " <------------- Numerical Fidelity Report (input_scale: 3, param_scale: 3, scale_input_multiplier: 10) ------------->\n", "\n", "+--------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", @@ -222,8 +173,8 @@ "output_type": "stream", "text": [ "==== Generate & Calibrate Setting ====\n", - "scale: [5]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1344,0],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":3936,\"total_assignments\":111,\"total_const_size\":4,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[3936,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450364929}\n" + "scale: [3]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":10,\"lookup_range\":[-288,300],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":3936,\"total_assignments\":1066,\"total_const_size\":257,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[3936,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709715505688}\n" ] } ], @@ -250,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -258,14 +209,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 0.5032918453216553 seconds\n", + "Time setup: 0.5041768550872803 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 42.125\n", "==== Generating Proof ====\n", - "proof: {'instances': [['cde4916bd205742cffb14e51076823185ef1d3df4377d71dddd8ab4fd1be1002', '0100000000000000000000000000000000000000000000000000000000000000', '4405000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2c94236c6b78b974218280e6bdc3bc6db9b5d8b8d83a6e5892e469940861cd0300cb738f042c2a4cc44ffd1dd5af23e628473fc0555b1312942de1720c02f8f22b3dc30224e08e599a2d30235caff819a069e32f902adb97fc578a8bd69e6e2d0fb30cf56c55d6ac290bcf99adf571be0c02320cc576bcaff57ae028251c7a342de13cc02efcc28f52100d8566fb5f986d34df8150abe26ee7d2c175a461833d2d97092c6ef6426ed3f4ec4a3470d0717e9af7f91ac44eda87ff6987ca939f5e25d12d2b7f8ef08a375f714e90d800eae30b656fad73df23869ef8d271e974bd18ef6b947dab0b760a6eec58665f8997b89d870d9ac5e14c62e7f89f8fcac22e11c229fa0212f9561fff93d18cbb1a0c98ae31b39334043ef4fcaa56360a4eab2f3d3214d5196058a37646a7ac880b1a86f7c678319906e939c7d20449cb475a25c7f5d1b2df7618a86d1b7e22228a9e9ba4bb974032be61c46641cb1e1455d23009cc49fdb9b7b2fa5e10c8efb9441756c1fa1b327264c2da1e9f16d1e8c25310e1d08c14ec354c4cdecdd0c6eebb094e220a9a6693fc602c498ce544249158040fcafea869728fc5efc3707272039d4ca09eaf545ed98f322a77befc72e82c22bb1fd90c3a3caa9b62661c753520cd5da22f502ce576552034d758a301c1411a68577a68947e6b3f9209f381d36caefda1f9301bc68e9e2174e894afd11d8722e3431ea5461472a104c66521fe0123d0b31ff88ee1c581ac3c0f000701637f10cec3ff92ddd1b7059e2ae5c064720e1e1021d1682be6cdcbe753007361f062161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd52d0564bc3f875b2e3b2b0e738f56212f7adba7b3870f32c27a083d08b449b9372b6a03a885603559343df78a5c40f3d82edc90082b6055ba2f420a8137d129aa161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd5067a76319d9c91e9cbfc89409c37b04a851a5c5eebd3563cd9a0e168a0227e6f20c899f5d46a69e47ee0a8b6f06bfd9dc411ab1030a9bb2872c67ed10d9cfdee293ea9c8dcd3c3486e8003179e5685de13f7766095bcc11bce134295b26b67b92c1f989fc2137f36df86b440f9602b061b3674d7e17301520e5a72f59d6ab5c10c60a81aac36e145d7166d7f4590fa2e0b3a0d81a630c50c35e8e72aca04526f2c8c5cf62bc561b8d555958f4ef3febf64a9439e52c1dda4b15156d1ef2c03e20f313048d1b0372dd4f9d9a623de5bcdaee9be66368bb6427e3f1d41d3dfb5bc09d2be17c939c6c823338b40f9402daf06884eaeca96b1db38a171f3824c8b212f3bc773d142981c0f42206bc9f74a93ca8522de775a91c604481f467b77150a1c20a6e0dc9dadc5ad8f092a10f938f73079d4816da473242497f379e26e70b80503d7aa99cec3117ba11eeb19e31215af25165d6e8861497bd62687d00b72511e771e1169bc39873d378c21d19d31176c7994566440e60174556c5da96247f90876c1f97cc7ebf85b08fa933ae447dd09ea43c12afbfe171f39a85798f9f8072a854802d557627695e17a30bf6d5a64ec130f85f0c4f3b1695d0f757b98936a0069309daa08e271067017e54481ccbc0b98b872e72bd8a3dfef4b7bda33425c0d966befdf53145c526405c6e3d8d2ed3a8f5d3afd2e00867af01d2247cb36f918c85f42cced98b7d3f56fdd79d68c0c143f4b03fc6989604c7dd16c2470bce31992ad806477a61997d6571a4f3716d0da035f1a7c4d7201f09b7e2843e2e6df1b74ccef6ceaa27394cf88cd5cfc8529fd5739620d7f4c4112844080a286a947122538e92e0dbedf53b8a193552ab95c88d315e9e34c110e154fec1b03367f600bcd3d0602717ab4f73b4f822dfbe8a0a2506438fdaf75474057055f774c004d04101bac052a02add0e4a5c0381b841985721ee568d0031d190b8c0080115bd62f2e7d2ef5ce24d0a906075dbda4f5c58c9fdd9e295cdfa612637e6d89cfb6632208799dca9f13db2c9b469b34bcc76492e4df7572eef79126d003cffe8cea1806746eb0d6a96452be3cc3f5b25087a75a26c3ca96c23d72eb285bb908c69f1c16228dc5b7c196bda345d79811e9705b515f564eb9ddbfcd44ab4235febbbccf01fcf7f6176d271bd8a535506cd1dae4c7c51f7fee6294c5236888068d1c97c92429d5ab79dc0a8b7f07474d50623ede06fe25bae740c32e91f6422eef96920c01b7c21b6432158312ebd2f0cea0f6b1e7698f3e7015619777b22f264aab5d8c288d4f086748722495faa60309cb3059ff1159f59ee9c33d711060c001e5d63b22cf50d1d71f93b550a4d8708da81b1b8cd111da40c88a68cfad4bc39b44c0a911c192c3f4d996488389578c67ede96d881655bdb1297be3a912cb5ab04304612e4356dcb2d467f3b027833106fd99f479a3b7a54bc9416b9962a597bf7e76f527fea37e51fae9b3281459ddf0028e6c1e2f5a8880330196051dd76e18a209e91c418ad17b891d6a52975e1ef27043bc779e72093b301ed5bc6b9fe248632763094c33f01064f1d3f49aae5197aa04aa905e4a10f0ef1ff483e7a1181a457a691cb163d70891b05df3d660ebf91920b4e17f4f02e0fc6404f15f688cdb59823a2f94aadefc05d5aab045c4a10964ef366f739480a42ad7feb50857f4500dd3170fcd3fbe48301d493079c2f3bb889498a276df3717703034dc6e1a45853345510bb38e434cc3a6b997198e1ff3ebaef011c8f07a0c752ec73917353d4b62b42f2a06d699693982670ebfaf332c5ca60cbf2164420d3a23220fef0c83adc1855d16518e72c7e5b46da0e723ab7b6c5ac14af77e8c3fc26a8f7c417c4c1965ec23177a7a3a852a9876c7e7352814f48ef12d84c5047933f9da8088b4b6d10f985f252f5838e898b737275661809c3f17693eb4008eb7d9036b19b652212240441328d4305c3ed0fd2a2f6e327dc7d0b2175929bff8bacf41452a3cd8de3a84644e276d297eb276c8cedf1231784dac26688d75d2ef86a3ceb8514f49c87ccc2c4e11319c8c8134c9dc88027a09027a8951215eea3c9278d2fd30a65c6f57665fdd06e1256a16019766463b990f8f2fae9ac54c84efd500d402e6d1f341179e4576000000000000000000000000000000000000000000000000000000000000000029832908cb3008c37214aca6f251a9c262e76358a4b89c8e5d100252d861ba8b2b6848a0c2b4cc3095b17d78b4e75b99b368d6c5a89115bf3f6c511f0c9ead84064832da44f2f88cf8470f25174c50bee14ece3c329b8d1e51e20aab2490bcd12adebe87f2769940e52049e2e6f63473b6ee92581d4668a270e484f100e562e400000000000000000000000000000000000000000000000000000000000000000c7b982902bb61895e57d036c352445201b1f810749342ed277b4362694b70e000000000000000000000000000000000000000000000000000000000000000001962a3a1950658f5c98bb46fc8a57b55efb4e03e78424ab4c9056c2aa34bdc7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167a9a10e719a7fe4c8dda018c1c43d73c64fae7aa3eeb29f9cd79b6f4a1bff4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0d0bcfd57f78cad1f40c7fccdcf5e6c71724bd6d3669b2093bb67c3a11817600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bf6c4e4551a96b495474d36624e521178fc84ef8e2d617e7390589a0bccec22051ae1e631755769b29ecf3bc30e4a9d60d405e6e5a2c07c1feff2569d31ad29000000000000000000000000000000000000000000000000000000000000000011c3523acbf67363b21a221d0f7cb26d66b63c7bf06017a2ccc47bda1317a06b000000000000000000000000000000000000000000000000000000000000000014a1fa5030dce651180019cea93aa66a86caa8f553adb0b1a4cb4365519210822bb4e7c51bfbeb193a1bc73464a880f0bc1eac54513bb77404f8a098c7d92f932a5dffc78ac4bd919d1b78d74edeed4af7f2b197a39a810b36fef7f4fc9c8b9f1223c390dcecc0bb9378436e2ed712ed59cf260280a78a5ff76957091a47425821138841065eda0152b92b99bc0b1d397f0564b3686da224f8f775e369b7e9c60897b9acaf2ff63467149ce814e4213be0a7c599c7f4f8a7aa4df096fb695b741657549a4183070552ba4e8acd0a4a76a0686ca258bafc9544e039a9fbf41add23d37f69eabc12c5f40f60bc63fa2bad2db44c8639028648a3ca4b8b3a4f21a324011b410939d94f9d7a99811eb7ead4698d7b0fe6b1832dcff74a9ba449588e0af380a808791505ef66e3db0e9665f987c70e96a0daa3bebfd9d23cb8cd44102ddec57487ca6ab9505d794010159368681b40366ca327fe279b67b787858fd31fa407aa4854254b316aba7b5892ac7791bc16f46b38e2e0a3b9c2a506340e251f62393850503ffa777b92e41fea1e7cbd52a59d5d8769d343df61791e19cd3f0c553b361cc56ed77044b082d8a8d03f3acbc6fc0cefc3f6cc45e4611e58d2110c82c13f1be13dddb8631aedb0cf6b2dc3c66030dbf80420780b638f31c5bee62c206993c7aa1d8f3e0c7f1de73f68010808ffbedc61589550634cd4aab496ab1488c4b6755520db91919aa00ddc69f525a1683bc424667e8ac3b8d296b799ce0fee0c957679d1066c055e3aea7d646437c80f1c1c2193042feb0df57c5147fb1363f5bc253c9b7c2ba4bae998ea7996d50d05ad616c60ea6edbfa2ed5055ace24adbff3536376fea8a733679ea33e5f6e129b3e927c2ca66606e7e802bfd8fb2c542ebda1faf432e877f73303503c1a62c0a34540e0b4953d2ee3bc28ced6e01bcb6d2d4fc74a9924329a48823d6eb1bd3f8c339d66982a2dd1f008d59a22702be0f1ed60b179cfd1ee6f58449862bd09e177bdd3e6d11dc98a7a4d8b7c482b1890f36e72fb4db4523cd4e95d57b772b148af48a9582aa0305e41e5d1e5b37e123a561fe982034d3ad3f3fdcc32cf4b0d549a98aa0ada530239d3361c3cdea308a2679f4b9abc443d381c8a52b7f4aca0ebc0ff5a05dc005b3119de8df5f0ea17d67ca7fd81857b0ed4de96f649ded6124cf4cfbc91d26cb3e2c6e856ab75c7235c09df61434cc7eb1f07e574c937ce4fdaf00b55e2d8b7baf4986c6cad1ee32784a04cb3075b41f6c7d9a536c78f361d1e401fea760ea9da9401c4ec5b9ffa112bc9e2d365727be38394816f37eb66a7d26983998ddbb6c50b28b84629f7cc123a561fe982034d3ad3f3fdcc32cf4b0d549a98aa0ada530239d3361c3cdea32db59d6fe0c69d327169090cf47d45c08c02640753ee1277123a07412e9321c40a930f0f38008d40d71eb49fe2005da480e0bcfb74f51fb57f33b04993bc30402342e77b269b378c4c8a8ff819672c9360237c26c2d3c0ec3c7353e19218617214e29e12186b8c521e5025447d638bc595a1e1a1f7d158e398ebde23204ebd142411ee868ee05e3aee7c56ea7bb48b486c156a5c1f80c76669813a77991f7da02e15b4d8c9cfc94aa9d024f0a8e19a253e98fbe9dae640872acb39718b74ef221b5270e54969b11e49aa751c7a6a65ecfa08bc207beb73904da128dfb7292c11', 'transcript_type': 'EVM'}\n", - "Time gen prf: 0.6178569793701172 seconds\n" + "proof: {'instances': [['11e5950d0c875140b38d8b4bc0997697b7b183cfdbc19e767d87caf0020da12a', '0100000000000000000000000000000000000000000000000000000000000000', '5101000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1625012d949e4eb4c27586f66261b621031dbe0ccdfc3e9f52befe7924a7e13511cfee3b0378f23c55d5197d2a1c5751cda3cb062d292c11bc0f91b395b23bf227e3edd21e1f2d40bc64cff0f9c7aa4e1dcd64338f8be2e11c8a97b78802aa35220781683cbc8df886fcf6ac8198b03e64ba5ab877b44edd9b06294c82a0cbfd1d2b261ace15131a732d6d445a157c4c1b80f33c218964f15650c09eaccbe12d1248f27ed4372ab8342381484d5ad7e91765eeec71c34cf1673ff334ca8212672e1972b44bf73699e64b18285a0445d88b004a396ae2b699c21d32a9bd5ac0641e2d54bf5a1f3fb18a5ef4205e67126342656ba76c284e1cb69650ef14b56d210b81357b44cae0b8d93760a9fcb2aa7f1d1a897fa22491a6051cdc7d8b71565b17255e6cb186e5eaa63a34e81b65dade0d0c946057bbf0b0e8c4f40e016e4958189c2025a8dd3c756ea2daf9a91782e66df03e19dca4472cb4ac64423e8b61a01b2390aeb646f59b85a15a11ff19149101df8b33c028da2d43f73ff96b09e86e1188a34fd8f553c8822d912564269ac094396847f6ef904bee356e479294b73a1d0493b86498fde8786bac282390d28e07823fcea047af5b712c52153ec8ef3706f80c24e3571aae172352b6a39af53b7441bd2a6fc032866f780246d46c03bd190b74594201a2f5645fd82182b726b0fd2a34f51c580918ebe40260f1412b5e1ac80f190c254648e9966fca81ef5edd572e91f5e36dce675ea48eb34f9439c10dda2ca4defb8482fd8906b12828002b216dcd199d044117ae6a7cc457b5ed0603613a24a193edd56e5bca0c3437a2d5f87ae479cc2ac3427212f2e29698ab892d441b5dd7a532e8b36eddffad661530aaaa65f3a7dcc8f164d88e53be1605ad161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd5196403b8f091e092508911daa32fd847e3b83ab431fed0baa60106a26e3d7f730e23a3cb4386422e41e24b1eeae4ea86419b937beb321d0a9dafcf9570afb341161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd52fa10bb354be5e6ec932170e2a1b8356231f3e209a1da54d05347cb3d4e8c859038adc5a7877a02ec7ecd220b34d4b9ec18df059e3cade0aab21539e47a8cda82d75aa5d59e81a9c4c9ef676321caff10370b2c2c03f1c22f5e2c7df6fd5c6632d9ccb3b84b0fd674f38b122a3a26e09cc9da46ce62edccdce426a5f8846dfb80f22b5d9da0377c0bdd3a5f7b14d4dad0ca3cd2ef05833e85658a310f0a587ec060ada629ffb042379ac967389ef170d7494bebf5593d06bce476e3fd25f39e6139eed3bddca151a37375830c105177dff7f07394b2932fc4f0dc0814ee3d4390766a21542a7f03f26347e0a9121676b04911683f462a6c27e583823b90cec5f0c5f64f34bc0ae840422899c1f0976309341d0034cbc7582e1c7c2fbfa9aa02c08ea7b343793b0672b5a6dd5ab0f6ce57d5d59bc021152ab9b75189d0d17f1c42e54246a4b7e479591e5994ca46a6e0f49242a45ebff717b6786b3c4de2a77822f8bbdcb64998c00931a0c39cd3370f52910640448bd9661a38065054e67270a29945c4f681b87e47efd2e0e7b82937f2f48fdffa3248063e7bc39966a1b4c152a48aaa6872f7412f6a980439ecc94e0262ecc93b787f3cb47ff4408531066f50f58ffe77c7d216a0213c86f830bac422535cc6f06c50755070c0336689f64d127a2087daa005d5424605446a2c2c4050cc0fa1b1dbb3393cf1bfda1c299696108d1b50adc4a2a3aee6bf36cc992491fa90ded97bd9ec18721a0326a440574e601c3759aba736716de86ca7ce00428318fa31d8f1bbc93f1785e48cac9b4fa4d2159de308cbb36e8e5ae552a8eea2639bc3d32ba480edb25fe14ec77b33cd2bf0071d54f80945d72597bf2650457061ee66145dc7d13decb13ca43043877403b1c83dbc35480f7e506ea83b089ed961765dc218a22bfb03df3eb5013295e6a7c25aca004a86b88fec211aa6c391f9f20db0e08f8145e045a7fc361c2893f9d952fec0028b749a558d3455aa5553186b305c8b51884c096defa0a0bb2f9d37ca62f3b5fefa6d760c86ec3d2a41546113603d2f323ad83e34948ccf603ffa5fe51062856e7a55244dd179fa0910afbcca887d84241266667cab4f7f426338bcdc41cdd5bd701696ee4d987b03d848d90fdaffa44b204eee3d7c94ad12c72acd62c08ae789cb9252c1f1ccd34a4ee9fd2216c328dc4892e81b100150ed46378c59507aa0c385365078a432b63e31a46f90b740820dbaa474e6771ae588f12aee2d12f85ed91da1b5cf8681541329b32756995ec0bc1b9d25323080587c5fde6abda19f2f282a847c04b966fa9a3f24f0d94c85c836ace6976665077066ae787f809302a0f53df64092dec0c927d4087004df8ef1c8ce117d3c74dc09cb0ae3a0fad09b41de4f06482d30a272eefa409e4f2ff20fde8e97639d8076767cfd0c4bc5321d976744929ccc8713f6697f553c45d43900d1d432b2a7e516ff7d12f2ce97801d7a0bea0b768aef253445013a0507843b02002d802293e8b8eb37d492f5b2c0724df612608742eca66a3cc44c11e785833456c7918eb64eb60ce72fc6819a71bf922d5c63db9e7c8b63a33b0bc045dd6807123b040567f8dc3430db5b07c3716e80dc11d92b62575d73b8d83cd51672773e1c2247feef16468718f539854011b42abc7cee45b0faf1752b65de157d551bc93f75dbf303833ec7d4bb929d43419b863682ae42fb4eb0c770e26cee7ac5b14493e6ff9c0cf0dcdebf56609ab2921072e03ef34a312f7f3e2a0d2966925c8cf308c71eae0c50b3ad0e0dbb366d21772279e07a986017ff2dc380d75d7b864e473c9ed1099c588f28f93a1b115d62bfcfe113e4f959b40463bc9a6d9222de8373011ae0760b2deb3c73c67d27e40034fbe114fcf1bd82945d173d13b2c59750758f8d7d0b17857d4dc03c5d3c4c2160bf8dd70e690beaa1b8d75e2d1adc93c7d5499e486a248b959d4e1f33ab64d0e583434d0c9f61cc4e7cb5204646fd215c789c11dee736631443868fb8e803b22d009d4494249579522f22bbbe2631eca590e129d499c61937f5af0a51456e120078e3ed074064ebd69d7da85f18fbe2fcac27a33d1e8ffc7c762c96e57d6f008e3cbd2014140e8266e0a36a1da48c4073afdc17f9f08279b1c608fa8e6192c0d4f90ff767da0703a31da976c3834a95820a0382afb5d18d67f6b9f7c5df87516aad58f6653d1c72e62063a0e4ab185f3547b7e94d8eb2b39deec937bda42302f5c4314a3e5a0674eb4d9662d0da9a0c0bab2485ac8a655ea47366ad14b9c050f8fd7ce54919496bf264645643cb332b3887e0b437a4b083d3163fd9aa3544a2cc4e411733f13742df7284bed2d7bfeb83ea2d711dff368f11e3bcf94c2113200000000000000000000000000000000000000000000000000000000000000002fc47709a5eb0e1852f749e2522f3d3c114b3948ea78097731324f2c0065f24b011cbd99902939c3ed8d2f4a41fd33379ef1a61be2455648a6a3744a30912a3f00000000000000000000000000000000000000000000000000000000000000002b1c6b4e4387c5a47460681e8eb9e41d8bed017342e2b8cae5c54090867465390f8fd7ce54919496bf264645643cb332b3887e0b437a4b083d3163fd9aa3544a2a9a9248480f63881a95a37276075dbb9afdcc142a36a5a9aa6975296439312b00000000000000000000000000000000000000000000000000000000000000002cfb814c9face62e4f0e7f985bc04a2d18d15f7a6072f79e33331d7593f2a6c1011cbd99902939c3ed8d2f4a41fd33379ef1a61be2455648a6a3744a30912a3f00000000000000000000000000000000000000000000000000000000000000001924bba11b3314ba88ee54c522dc683c4c78dbfdc1394e77e4be4c1f6f409878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e92fa6c1fc62e20560a63c9bd8ec70b134bd6a12a6c8030ddc4e218e57decb032e82a2c29ad5ee22c2a40c018bbd7c6d2efebb2ccdbbe5476241ba5bbb768b09e517ace0d1e51754f6f4d42effc5fd6524511327b0576960c58f5f7084ed5a00000000000000000000000000000000000000000000000000000000000000000e20cfb1fe98464d8691407d26188aeabff6471c2bd91502049c8f5d63337daa000000000000000000000000000000000000000000000000000000000000000029b6dec3f8d5fdcf110e02236bfac98843016f07f895a0d60fbe6043276d7e49277bc7bb0644cccc92df01f13d4e0fecb932375b835d295c3c4a476d18290f9804ea647d338fffc392b26a03f69ba7ae913eb6707018e0ae9e440540f944b2ea0666d07759ccc36e99f75121c1145fd70027c23470a0cf481be9c3a7e47a2d7c29ffa527eb3dcdff4493cdd0c16a3dd915da10fef9a66b811bc391ea7b0d763101ddfc8cb2c986dcbdb2fae90e8ee03e3d92f3b756a317b5e5cd9ee89c61be521e07be4b1a6882b314e7029d297cf9fd06d0122a52dd7ed00f257fbef6e3656d2152d69f4d05e60ee53b604bfea0318f070fed13fd7588fb75f64cd5ba611eb20208d0730a6b0756b237020ad535454581f2c3d8936b506888c6f1bfbc11fbd126e0574c9346eaa4b3ff7c5b450bfb579a2879629628660c8af12069cc6cac452c522dd4a45a88c528a294ab126cef73d6ad8c3f0a11174659eb3495c98fecf329397bde7de0c0ea5ce70bf2f276adfbcc2642b4181768b2f445b5b1349b365b06c4e783ec23b7f3b18a29cb174bda5a4d29c77b851ac16f63e0805b34053a7d1cfe1015ac8113030510bef7660c7ed7f029d790bcd1c65baaaeb350764825ae2808716e8163b590c5e77934b671a657042b648ce760c1e62e796336fb6faa2a13e9948aff5d12984b1a51ee16b021a0bcd42701cf45d377a57e822de0e61c14225027355945a1b2e69eb78592ddcaf94ff009e6c0d8958be72dd844b9e365921178531cc3e541d53cdf00c677c9eccae476e847880b0b18e2c321c0c82a54be2d47830c95c0439eaaf849be911a032d973edf4b2bd9f2008e88e2a51d266e47237f37d0f9703825c9dd8cb969f58b477e432acb08d4ac125456fc2dc74fd5f22faeebc4a83c3edff47ad93745178509ae9392f1b13c7926d85bf4f3121386bb18ec4c2bd7bd9663a4804dc6e994b3fa06480c1bbce05096ae6995439828353121bb4a2598deecd403ccbf40eb168d74e9834debe5cdc22f6ccd9dd1b4eb32942de6478eac74adda45fef45166ca1f3896db1483f4debdc2b48d5a3b4e047a381d50c777d2e730ad63c949a9cfaa7c769ac61c1cc3737a60453f5345218bee1510a4c7c8b894d92f65c904a934b80bedcaa8186735b5cb9e51d1c248cba9970c2354d52b158ebfd1e0ab8d5d15f76d4791733b6844b2c32f01d7025e6dcfc9d82fdc674871dc3246039019cdf34096107a4a9b88a01a6fe99ffaa1253257029a2a043c55ba31c9f12112338b1b5a68d6a0d629265039f63d6e9aa2eee7386390225325cf00a9270d49c6f90d5cdcbb9e81f4f231c315b38edd2ab0f87bdab3671a39bfa7003c699079c51e9950e1383f79d482eec3a3b6819a016ed5eedb9c8e0035093987780ce1bb7596ff02146d8d83339965f02d3499330677942da7daaf2354d52b158ebfd1e0ab8d5d15f76d4791733b6844b2c32f01d7025e6dcfc9d81a378ecdcd0d5f354172384ae309163860a62149767b2fe4e854b2edb1a88fa40ee46edbc44bdb366ff382cb052a2476b8740059aac22c2de970b3c0949c1eaf2e19191ad6fa9dc58f0668d496bef854656b1b4f2f7a68dbc61da8cec2d2c8292ce85538f40676f104781987214810a4e547a4a0c3c67ce3583180017bcd3aa4', 'transcript_type': 'EVM'}\n", + "Time gen prf: 0.6045958995819092 seconds\n" ] } ], @@ -281,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -297,13 +248,6 @@ "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", "print(\"Verifier gets result:\", res)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/examples/median/median.ipynb b/examples/median/median.ipynb index aaa87cc..68b7eac 100644 --- a/examples/median/median.ipynb +++ b/examples/median/median.ipynb @@ -1,56 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -131,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -145,20 +94,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 20, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" - ] - } - ], + "outputs": [], "source": [ "# Verifier/ data consumer side: send desired calculation\n", "from zkstats.computation import computation_to_model, State\n", @@ -177,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -209,7 +147,7 @@ "output_type": "stream", "text": [ "scale: [7]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":7,\"param_scale\":7,\"scale_rebase_multiplier\":10,\"lookup_range\":[-12430,12494],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9345,\"total_const_size\":911,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,7],\"model_input_scales\":[7],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450871188}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":7,\"param_scale\":7,\"scale_rebase_multiplier\":10,\"lookup_range\":[-24804,12494],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":15668,\"total_const_size\":2421,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,7],\"model_input_scales\":[7],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"ReLU\",{\"Floor\":{\"scale\":2.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709646739459}\n" ] } ], @@ -222,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -230,14 +168,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 2.8171370029449463 seconds\n", + "Time setup: 6.426691770553589 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 49.546875\n", "==== Generating Proof ====\n", - "proof: {'instances': [['13613be83876b1d6edaa4022f0037a4a0dd2bca4e9a736c5ced55f1d1ec6fb29', '0100000000000000000000000000000000000000000000000000000000000000', 'c618000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x0ce9af8b45cb5b7663b33f5d7508ce0fc409fe85a07a800c32ebead92ebb5a811cc1eb032647d2cb0606ec5e750efdb3336af791b298c998699e51e491e86f2b17ca3c83287393091853a7ecf57ef462460cc39a958b5c7af1beb73fff68764e0e33276478397a787903d7351b01a9a37d393d3bea9fe129a28493ef9c8bbe3c1f7ef49e431f512f55fd0c00d44f16e0c70eefdd006db3a7c51e87a6b16f530b16727a7e54c313b2d326ef1ad870163f2a5ec496ed0a5cefcfc289998e54694016f90bf228871e107559a80762f32d25930e333e29a5ffeab5468c53891cc1952256417ded297a332d121d41c0094c9b83c534adf749405a96d531c115d1302a1c707ba4c6bc46fcb79665fd53a65629bd02d2f89f1c412775fe428d436b80bd16735a4532863b6fd1b5439f97bfa4503f086b9d07403c49e66926797b4fff651890131f5b5304be61bd1f956cb22d31b64056377fd5f2300a8e8bd63f24c31424af2a121c087de49663a61af2e9e22da81dad8256d33bacc3778123aec428701995fc8695b4cdea5ec6bc741ce6da57b8649e7caf786df4e04299a1a1dd651f1c2cfb1bf13ca9596798dc5075ff1f4ffae580ee2d6446e7778bed861f3e2c39025ae084095f93aba123fa322a16d08696125de910cd5163cfc86553edeb2b0a284347813232f7cb49d5ac507638c122308821abcaca62ba1efd9d062f5dabab211c1ee0bfbdce7bd4b8a026bb9ed3e61eba100c92db308389bda11536d3b7e116816a0dc66ee6112cee69a3998b11f29c937e3bf87005db9e9d62036ab07041081aaa03a3e6774ad5098d23afe60fc9f0b9aaa16a625331cce4f85db3ae8c0b02b332e6447f99595ebdab1887948e333fee15093e019e38c0c72e7df6d281451ff8764943db4bf1144b54d7cf7f78aea4397fd9cd103c9a789b66bc8c589c371a23fd809e0fbbd40272c7d7430401db4b091157ec0b19e9da8aeaf7253ad3e8132eb456c55181c33ca955414462223e8facb632916c3c819a40ef47b640d5cf0b89ed82ff701077af30ad6995899687c3dfba7edaa73b0972460bb3176bd359137176a2e13934309375d36ae7b89d9eafc5087576facc9b672a7830355b7d8b0c650bb39f3886cd44b7ffbd95f84dea2d4655f1285cf7098c0da8909134e9ba03e267e86ab86db2ec5fa3cde12f126ddad606254754107707a6cc00cdb5dc122dd226a6a8e348e63b9ff709ddb50d0e94f011936f4809d7a8d4ed47579d1aab1fa8767544691f35d471c3d0998fa01e262e8e3f6fb9e50a992c8706824a3e5121af62c381423338d6e6cdf3c95790d6aa98f0bf1ea2dca2a365e2e2456e97c312e2ba94ea8399093df9714d324574a777495964309bcbca3dc0b08016e8c556088a915b8e82de1afaa5bdd7b57d12c17f196f427a4cbee3001c67047395439801b94e10f3f4cd58b6845dcf3fd405a11e88f88f2a3fc9fbf87625968eb9bbb1293d0d354e1c9d720d00a77394550f4106289a6adebe2b6f7f546e6456e6e775003016edfcf9b6e681c52717682b0a7f72e1acc9613e48ec18d93285908693de20289173d148a6ae77657a2f04ba4e71425db3dddffe976a340d4134bf57be0f08c7d2d78860d60ab95da8684a55a4deb3e36a62a421214166f5eebe2596cf1a2c7096d987db209d214f58c97fe56bb8be4149c44729b7f88222b09b65301dbd23e23ac047ec5b3a7ce9fc0fccc373de817b36336565b4d15a0f2d1b42d65fa102e37520fb3d92e75d2e67139c65076d152fadaa6c12564a3a6c0c35606027c429baf567ce5b4cdb2dfb84249848e653f856ac75f105d50e4cc2a6856273e1b30c8b14af8100b7e65c57063c838317337d6354ef8e092f14ae6b523cb84abf5720e0979327e90ba6ab41a4e73fdad4867272dae0a670a30422db150a7168d9a02de2da065f55daec7763c8cb108535d9d55640f0556d1a70bc37cb523077a2dd04cdc0193beea33e6a38e9c616f15ce72ef57c55521a55917686c5312bd94c2b1385f59f9bd1517825d3d1b0173c667d555e8384212012f2f7c07858ca8e85120849c6232ccd1b6b7054ac1a821fd5d8c687df121f64b29b372c6e3eea664dc21b07fd08a45ad8d719ac851c7ca31e42492f2d60891bd8ad7e156a68e796ca82304126f654a0b0b195f62dafd2269f29cd69613e53f3c0e9253117f573def77c26d4aee2f7eeeeb92de7e0321c1c1542e9752e68092c81bdd9af83e9a14c6628086a2b4cd32f7bc1e6cb08dc08e8e6fbdcd76d37e4410ebb0bbbf33c132a859d1ad6a2d0d163c9357a460dc4c724086d76bca6eadde1ae87417b029dfc290be41f7f67b6ef064549638dc4f2289bc5bc6135328fb0127a79eb303e6c69efac2f16e0f2d60b4279ab6a404fafa39c3ea3d32d1597aed6575775dea244be5498d60ada6d975338204b0a555569133521c5669ed1a5c6912887e6099da4fb33c623124aaaf8380ae708eca6bb97996a99a8d4f03fd164b3593cf471d3c1359f5802035b1c28f8af9ecc17da8023e6e516bc57b1643273350d5018ccc723d2f235d21f4334ae62b9f7f849a7bf60e014ad18f784bffc15ce29632f981f3ebd5243a504ce158d667d40dbdfa5cd8238960e9c2b29ff21dcad47570f5095f46bedec04045d8e1f269635e2addb19f6a7071fa9254cb78ccf0b2ff526f3da91afb1bdb918b78dae336cf0b58f75a5beea946c6c06c75668dce38ddaa7dbbfc64bb86bff20ea748302b3f43dd1d50677742019b28015bc202cfd31b5cbb7c274c19c8f7520d1be56304e5ae5c90dc26649e91f511a73ae4440b40cd66ecf2113adae9662186efd163ab5f3e3c1e1fc474578b484f3a63ae43c94fe36d474835ed5f03a6512cc7709bc996bb7af41b09aafb5144901086a1f727a26181d6b7111c22540fe26e72cd8571ff6a47f84f7d81818a1696634aac15e1770ea8fb7b5d5f9ff647021bee8d74ba74bb4f651bbaf9c308f7bd75aaa954937fce0868b31acc2897069305d34c5b9c40dadf657305ef2d29af32f89d5ec6d084eb2c2b668fd896d596900000000000000000000000000000000000000000000000000000000000000000d2225b937193ccd3e4ae31534abd1d0e9aea3e8e2e6fee0c36b9c009ce6503a00000000000000000000000000000000000000000000000000000000000000002d7569c7235f6c5603bf96d10e73ea4c7df2b14a7719288c6c88706b7a30a0482baa079c453acf02f61ed501a4a4ff71ea250f9f98e3d1ca2608765f07f3910c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305f3af42bc5cb7974062cf32ad47bca96944cba900e4ff80707b38da2d273e225f7e8e799213e6eebf6b2ddd3e470ce71795c4edb2edd48cac2fb8fc4713fb5000000000000000000000000000000000000000000000000000000000000000018714888b638f394adcb8452330242a08ba957a0e5341065658df0b99426846018bb4ab5e25304ba680be1b24a3c0b886160ff752394d7d27db6353940ce5aae00000000000000000000000000000000000000000000000000000000000000001f667aec6177d820ca01c317fdd6b5573c842bfe79fcea6a54b9d78ec4f843dc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020422422927313523cb418bd92d2efc5136b785c6e389c5f182d51f4d9c4511f199e33f4fffce35329e69113698981ff2a476bfb7e7ca5ab81b119cc1166fa8523e9e5c641624fdaab52d9966c282accd0566e523e0d6f8c44b08c45b9127f8207a93a0642fc3d81401d4f76711699509ebf41233319b113e3107628556d44511f915a5379aa94689a619b1a78499eb09169213019167744992b35ded8442e470dbcaf4f17df29a7ea385f0c18eb73bdbc3c70fbfd40a64319c01cd37d70d89819013b6fa2058e67b08a0fe0f2f2f56e99d8003e9edc664eb146f8331ce30d802de0f1dcddb4ea3635a79a9e26a580531d7350f0579852dfbd9f67bdbbed0ad30ed9802cc9c1664bfb38f676965a44221f7818770b035289708122a465f1789b17939344aa52b6b1762a0eba73b4e9f79c9a7f4f6620c2bb4859a843526e07192017f29cc1d1d9a75cc77cbec1f4d32dfd955ce6463a1dc223d703e77e4bc549021f2a8b4b2bd6cd3670890e2006a5c8cee80b04c31d1ae0fcb76d04e371aa65212f7548229c9961e24ee5768a5dfded891e041334fcc665e9305fdb792147af128ba073eeb481f813acad75944ebda72596a3196b80944eedc9dcb51e38864f0678dc6602a58d49f04346462dc821566f0afa6314ed7b36e30738950fcd41951c7f825bfb0f2cf592aa2d512d22aa4e7ceb5dc8e63ae005c2060dad2eb5043818900fdcb43aaa802b999adac7a508b336485960056c574703291ced741f71432d0c7084ee65ef42ce282a04033ca334289687574bcee3db1f143b9c817128ae0240a01a713addc8c7197afead8f4fb50a10a24e9793767c31fa1370976bbef425d2a86dc31df39632ddd2c67b4dca6b55b2be02a8eb198d414d139541f408be197d11f1e40a36c8d33325738e6f21c68dfec98a9d989ac376da6d12010d606a3019bf1fbe908418fb581af7ca748204dd37ae1668df80aa457b34f97632a2b2105b75f6658992d17af90dd705549567c37107b3d572ef0973c84ce9d2f7238d1a68468c302c6b5032e2e883c27408e2fc587d3473dfb92ed5bfec26a040dc912c7b41b198b2ace9b9118b9a27dbd35ea8275774a7fb377d1b88ac15aa694d1624aabd3c255b009e4a8590a777de8088f890b428e312e7d9ed2fda2b1bce4bbe2cb99e73fcbf8753afc9cf832f7280f6e31736b5f61411835826c6ac3f084bb3135989bae796fb966eb864937368b2af4d6d826a0ec0f300986a1558253811d410d4ee89676ba54c22c8384180bc6b500156970943d9f0598c42622cfeca264b2e03ae3957d64793bd227a8099025cbbd162927c2ff5147619c1d17132e5114f16ffbd49226c7869984bbbd0db863693f2a79d534e9ec70b9ef4df90923182d9259be61f4426a6c4bf10eb477123633cbfc8eb9e78d52590ab6b422146f7f6b9100ebe8ccbaec2f2d5f0aab2162f416611222f23c001a6e569d5bdc45af219f71579529b707dc7010a9a3d243faf493177696537d41dea208e120704bfacb1ce0264d84a20f9965364969950f9219ba4807d63babaec888b3f964c95d56dada1', 'transcript_type': 'EVM'}\n", - "Time gen prf: 3.016767978668213 seconds\n" + "proof: {'instances': [['13613be83876b1d6edaa4022f0037a4a0dd2bca4e9a736c5ced55f1d1ec6fb29', '0100000000000000000000000000000000000000000000000000000000000000', 'c618000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x0dbc445e36929eef3f692dfbba12b4651821021a036c9da26e820dfc7b4f82db29c599853933a6f7221d50335be0438f7c9623a6ac4124fa71cb70c13575024c1237cb8dc561707eb2fec8f268e933f403dd6b959ffe1af09e79ac53e6fb75f821e6a780ec7311f59ca9a67587f6f840113c2abca554d3207d4841769baf6c4727ad548c26deaed4d2efc1c7b8f62565c87765cfa421df584354e4b5930d9513166ce70f8c33e12b217428445d5a59f2535f7ae59f94f3d4ce22598ca615b14c0f8f72b6eb18c298cf08fc70af414f77e3ad296703128b7a86463a2df445027227796ce55b7e70f729bd36c614b16ebac8769a5e003087e42499cfe7da3d3b220760c38319bcb3580ce34bc4b36b713ccb325d817adb3c2b3bc02d5dba109a7b25d2dddbafda602c8128447d9e62ca9fd3033c3cc0fab8a6c5b66084efd6a48c1e4138712c9ca857397e754b1da99c463570cf96ef8101675778a407fbc39d6421527f089dec40589281bd31e19c38f8bde5e16c49ebb044af88bc62699ba0f0142007e15d773a2d5827d9d52b4ba4bd1a5fdd0c7edbffbd2bde3f4937e565602abea233873bb9c6eeae0f027f1078291a49849cb4e9b309e85820391bcb8b571b3b25f55ac2f111a4553d3e7a666aef574958882d26e0925af768b2cc9c9cb1128d6858947100d912a20a5c23ed8bd94835f89477b97874dfa9de3f4049eb180ae025f7898527ec9dc0f5bd01803b3e241dda15128f597c40a7da793a4411f4003034d3935068703699d8c3277cdbdbf68153fa192c8eb8c4e68f3c445bf85a1c51b78e5af1e6e8e82af3d9438ef0a51362a5fb972f26aae6d38730cef071e118eef0063ea648ea23f3e812f5c3f17f466a8d444b42700d5f106addfeada3e1146f7d4be060318f02af2dbd80c0336ba9f0ea11384dbbbee6a513b4e66674a503c1edd7962771d383fd6518a3e3a2eb19e9be706301fbd72f6adae602f77c7520fea4a44e32e2f2abc42b515953dc4016c717e42ed8a447d51063cdaeed0d2522960ecfb74f6118e0102c9b14a5d5b746b6243c2dbf3e6a609253e8e0ac1c781f2e6b6bfbf5eadd5e33292baaa84d5f090b9012485c461eb82a5a90889ff3241dc792bc05a4616b6b720748acabcc6c866d5b53afd4b96def533a9f541a3910164ab5045a70d6bb8fe732709481f8e80ab4ede92bf399847ccf93783da330162d2e7607ac980d02432347f1dd04337ddb37a3f9c0b250f63d746f000c1b7e76164ab5045a70d6bb8fe732709481f8e80ab4ede92bf399847ccf93783da330162d2e7607ac980d02432347f1dd04337ddb37a3f9c0b250f63d746f000c1b7e7616b99ece57bc2a08e30e228b68f182d0b451154669d6e5c46b4a1352408add0c2e89ad7953cd849d9fa52f8d4bab37f862df8ee58e2d89cbf9cd9479a3f2cb38024dbf391a6f99203a7b357f672a3f05efe88a16bb0fb30b340031dd8d5bd273283e12b2d4c952041a43281480d6f6a000a005259cc2270e0909b1a4efceba92086eb8c4cf7159ef73d6f7cde87cb4f1eafb65a70318c3e4cf97c43d7fe00e6001eb08fb0dfc9807fccb4ba71d048f10905b7b2efd451249a254a65c057ff1cd143ef220f4583b1dbc3e3a152541f58b909e5fe8512ee545df958ab2cbaa9d012e5148892ac4a3925b0911b055ee997aaef7f710463d8d7c579c276fa376affe2ebf283ac5b060acf14290b8c0704e0a7ac864076dc8824f6d1c975cbcc8834003c76cb6358640ef76ad9fde03adfd68b409df5cd98a519cbda846368d9c5d9c1aa42ddb5c61582f434575ce1273de9595c5cbf2cb6cbc0b5fa9aaa687dc399c0811be6071fd60a4dd406ee79bf056a4f335da60dddaeafa20e5b38426d7841c1bb50a825d4f4a63744a6bdc0ff0aa4d1225e67fa87895b6732d964724ba94bd1ec41d3118df1e8c2e6c92d353fc8b2464c4a0b69afe025115f45ba11b205ca90ae138bfe5e607eb7a11d90310434af15aeb84fdb749fc64ab0f752c685db17f2a91b986b013b18eff64f3b788606e5e3b41e7c8554f88160f0d8ee830dab1ca10c4ac071f852a273843f8124300afefe9a42758c4e4e339ea29ebbf3368e97014bb7f9dc833a4840e2b78056e2621083e7248f14e830f17feda7b9a1599027625b79522a318a9f117eb415818d375e8019f866400d0cc8ba586b74c43d7648d2e3c56bf90f2eaaca9b3e7110edbb53267d6f3b48eb86f14727c088512c1cf090a286e4983f7757d18d3a4b564f0b638223cc2eca8027586beb3a2f785f5ba6a23ca62075395368a39bbdd785701caa7a0df009efefc11221662cf09a67ae58405c1f8b5e6f4fb1d6bd20a2aac75771d7885f3ebb1715f7dc1812b521aa09fb400ee3b25ec81a4484546893ecdbbf9964d2b53593e186a926720fad5b01707e22512d84c95148c151b6710a9ef2e8d805be584b4a545333aaea3b1b8c18f3fb625c6f16fefa397bde195d6741bdce5ba78c6ecfa25b127eaab061ce3a84ced971e15128fa6ba5558859ce88b3a23c535ef3b662fcc8e5a1590c407a5b46dbe0e2557d30418fc95c63806b655de98aa39ea6a3100e21aa5a298498f9541f5768905ed000e7fab8c26d1c510cc418508882d7cff265f0be29484d66ea84720f4370800535daa6140b34325f57835dcf37ce6db2f980552dbcdcf16c5fec6d0d2b12f108bc99546c90a8d04380648b65cbdbd036e46402ed75bdea2d77f94d3b537159d01658ef1d06779baf573e84cb1a797f41c3d0d5955d2c00131495968572504bc6382a09167d08ac1332a35336a52f5dff4cc0355be583a91f8223352ce9c1fa6c65500aea52c98f744902b148a0c2eb3ab4b5ddd436aacf40b02b2151dbc19d63810332f19641d4fcf1f9c805b1eedba86eb852ce2fb7f6705e8f0adf256239b3607d4d8ee50d4204cecb761798ff12dee70f7f58bfa51c2ba88bf84330a082cca2c87aedb8c5d90579a511081d4c65443ff4473d9797c71d1130ecb14132d42ac2b458e5b1d0ffab714fceaa0d34fb69789e0733e2025812bad7378ec2e1f542c82de1f6c9bc534d391be19b2de08fb580e90f07c490a2e9032108d92900a00040b2d73cf210e05ebbb7fdd5daa7f32501de2b321a7782f2494f82072fd1cc42f0b9ea373deb8ddc8f29260e03b8159ae34ad9e52f63bc7438d62c222f5102c07ebb1a8ce0de51ed7b3b17cdc7bbb7ec153d81cc6fc8c95fe1644dc2c2823c5a0d7cf3dac608f56c672df1cbe7515ae36273e2eacd19c776e28079c10990367d41df0ef04faf1bcfc9f720c1dc7fde4711cc67d640ee0315f2b41fe98d52b4ea27afafcad4807be1d57180b438e47e054761eea729530c954b9987fa2b627ff53aba6887011172060405e0bb0de74429385e90be333925689c67164109c28bce6e44137f8770e365208de98b0f34d82e890af3762c783e68755f0762f821646868a6f78fcf475b60990d264c49b15e2804dc217d58e03096432ce99fab71520b5eb3d4abf6fefbf4844558dec79979281df8496a8768e1505656afb2506282bffef903ce84c9fe77e4e82439a5e65340f7b57604c1257463ebb43fb8a2e0686cc71e9a7c4386946a6857fb1d97c6619bd33835a22912b58a45c00b4677821192fa1919c386bcb5a68a0bd1a6277df92e62dbd2fb3b734b9ed226b605bf212399de02f1bcdd93b7b178095df6f6afac10c902e4fc83bc4f163a743632ca01f9dd5c1e62889d9ecf80397a71c43c55df3aac61fd231778eeefd65b51d811826d434efcd67e9a517a56403f2f4cc016646f7989aac17252b3ae0bf922d84922659bb665289018e2cf18739bd9857b73a509dd4abf4b9c8a2ae580dd390f91c121acee3ae39a7c42fa550152f2f9ca76be3d7b72cfd2019bd8a1a1ae70e23b511f53b252aa4841d2e8e5c497efb493831ceb3bfb08a58f25d577c9bf7c5074300000000000000000000000000000000000000000000000000000000000000001ed78ebc0b89956dd1a4f62a5852698b0e22fd19ee6fd97db324104950896a3f242f67cc514010357d2f9860723be18ca95f10bdea9cccd77b9bc35a6aad915c0000000000000000000000000000000000000000000000000000000000000000002f00a71eceda3654a2c366dd7cb19868e72df74fed3526cd07080e39704a751164f4193a7e476406a6fa5e35f419dd082bb998078ec284759bde50493185d61745fbe64ec3db38749d7028eb6dde3a04f01c4d341c1eaf6aa9d53768bb68c9000000000000000000000000000000000000000000000000000000000000000021e78d28f1d6fcfb7a2a22f0fb686486a1811de950ee08d04e7194fb1c50430f2dce82ef72d89d28e499097f039f7ab9e09d3a216d1932c1fbd8b9cb42ff8f07000000000000000000000000000000000000000000000000000000000000000007ea879061ef601cc327eb556c93f9e39a9f5bd9a684c526b877ede9675a772a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fbdff0fef9a273cbd7781b4bf12947080306eefbf9e5fdfc012b5656be7d9a52c18054d3ae917cdc71cc4aa41d202abd9ce74139623bd8287574c382b8837f314edf68f975af89e54f18925e649dad6ea0667bc7ec915a9675693b49d6dd3430a593468aa20d1e949b3930f93b39a9d8612bb67c1fc14c76c8f08935212588e1355255385043803e3d2351023a8a229fe5953b135b439310334e0d8b5703ae120d373c82a8381af0ae7b89386e1eb981342e5f80df0e7e6dfbacb6bdce359d01073bee04c1b57fed55957bd5544c886bb0b92b0fd16a45366b2b18a84c7afea046282c2e73df0af9aa9d224931fc7abca0355d9e8ddcac44c44068f7001056c2e84048065a60c015ea1b0e4e22fe4b4501e9aed7cd6bb82e470b7121d98351506c27fc5c8aa3ef90b2bd572cb02176135a3f0f2755cdb028a49671b19f9e7100ff799ce4af7fa21f9661dbc8ceb158a2ceeb890216e4edc52727d5325b9038b17a411335df045e64dd7c4286f43f6863c65fe320d6be4c3e92b6ccf91cc51cf1fb70a4b48bf7c0fafdba8748ffe0e4c95e9e1b6e55103d07b680f6406ae6d6f0b2dd0229716a755ee2360a2f578e9d6c03fd6aa8f237aefbac7f2ed6996016801636a6dce2507bc26f3289a7372eca956145336386e5ec62492b5365dba4fe114235acea3dbec45ad86c6cf370607178dd7f0263e4fea30b786e9bbce9a422919ebe21309feeb145c4ad1f59a42952d0ae8cd7fe88de3c2970b4a081d9e82942c567c89e2f2d19106bc8c2b26508fd4834ef883dc445c50f1dd38d8b2ae437918ee56b490e26533d97d8b014d1cdf103be563f2e04ace113dd049c7aec90db81d3db0f186abb117a085304fefcc8e4f48f055870531a1342e10c5f66d68cc2f11564e0a314be56ae313eb20d2742b00bc1be78ddaed60018431e396d08a9e12222cb4c57e5b9d1450e87068d9cd0c7559d449dcdf4cc167c07cc22719addd29297b646dfa705531dc58f6d4a8654c10adb351705ce57b5b99f8a513e1b9044e29a04eca3fd601163e3a74c1477ad64f6ddc40f9224b3a5a795272e49a865c5a29a5eeaddb9f6fddf83251a8912523491ce87b65bc630233fc9d5d98b5ca0341158520694b55bbb1308aeb57d0fa672c2e50fae1f2e4fd9f9981c5e751a1fc0b0daa918d4b2a2fda4cbcfd0dd1abdc799feb2934854effff1da9e5193f6c82dc02883236eedc5666fe9f7097e7143451e10aea8bdb152954dce44ba3965c32e822ac60086befe0155b2cd75d201adf3b103cb1574061f5e283881cb29b0d36c81a4bc24b1cd73257df82e6016d081f9166750480467694d5f3ae601464c9059718b0b0b034bb1e617791f23d2cca9c0fe84fc895c0acb5e369e25a186e0fbbbc2a742d46c2e84488671f6ea92e3a6c4468b246bb7064f04855a3088d3448ac451143e2bafd247f26acfe88a12a4ea7a4fea4c8db2671c6dcaaa74dda59040ef72210bbc7dd6cbbebb49cce05e7ad062a17f89b0bd13a5e0756f7a3185274b70f1bd97a2bb42eb4a853b6c47e868162ec7ee933de540bbd212cd98d08de2c120b2f1dd95889557c85f9c11608975b75c613b524ff94f679a2bd0770d86913e32e2cbdb77e8ffca9869208668b4f0b5d1eaf968adf294066bbcbb9f41fa3a4cfc508c1d1f3d8eb3b8de5ac4dfdbd299f8b7df22b6c9f07b87b08dd49dad81145f72c78dccc2e7af71df00e34ea7ae371ecdadbe029247abcb7884a1e65c113681620a53a4d2f5f5e52a0ef9f4cbc0b96112d8c71f092d87c39cb760a02c49fe04b1d386022ba8b5aa8568078611d91102c60b0bd74921c9e873534f7caa1c84d7a0a485211b4e8c433cca2c491f2bf52e9b4b0f399853c96c7fb7850a1771817741b475a262ba1bd2abb01b42dbea6b47d8a636742cb9e738ebef6b7e9267f0979037258094e053b70dccb14a70eb6b385d340c004ff7e468da2040900901180b507cc7fdbb206a721e90f8fe233b38698f41d6fa951f1bb449e5a93e88ce3cdb61d8832924d66c9fdafe3f33040b44d2793aaca482959e9dd9ffcdcde4128804c037258094e053b70dccb14a70eb6b385d340c004ff7e468da2040900901180b5192f6acb155b6c422674022d813685465fb8ca22e6c8e0c93e14a49bb05c19f82a82597a8a3d4681c571875257b28ad7850db9115fa2ae9051b46524828d7d570c0e4920231f0f04ce5ec80b9c8f5950f1e921a96a213fd3fdec4bdb3cb28b13253fd77623af280f497bcda363d5e08d0ee3b9d02e1e27c8be379b7b44fe3a9c', 'transcript_type': 'EVM'}\n", + "Time gen prf: 7.927674055099487 seconds\n" ] } ], @@ -253,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 24, "metadata": {}, "outputs": [ { diff --git a/examples/mode/mode.ipynb b/examples/mode/mode.ipynb index 9d198ba..23c61da 100644 --- a/examples/mode/mode.ipynb +++ b/examples/mode/mode.ipynb @@ -1,56 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.1)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.4)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.3)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.10.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2024.2.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.49.0)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.9.0.post0)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.3)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.5)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -144,23 +93,21 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:167: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " result = torch.tensor(mode_within(x_1d, 0))\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:190: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " result = torch.tensor(mode_within(fil_x_1d, 0))\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:171: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:175: TracerWarning: Iterating over a tensor might cause the trace to be incorrect. Passing a tensor of different shape won't change the number of iterations executed (and might lead to errors or silently give incorrect results).\n", - " _result = torch.tensor([\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:175: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " _result = torch.tensor([\n", - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:175: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", - " _result = torch.tensor([\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:200: TracerWarning: Iterating over a tensor might cause the trace to be incorrect. Passing a tensor of different shape won't change the number of iterations executed (and might lead to errors or silently give incorrect results).\n", + " result = torch.tensor([torch.logical_or(torch.sum((x==ele[0]).float())<=count_equal, min_x-1 ==ele[0]) for ele in x[0]])\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:200: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " result = torch.tensor([torch.logical_or(torch.sum((x==ele[0]).float())<=count_equal, min_x-1 ==ele[0]) for ele in x[0]])\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" ] @@ -183,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -209,7 +156,7 @@ "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [8]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[0,0],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":302,\"total_const_size\":0,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709608308053}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[0,0],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":302,\"total_const_size\":0,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709638558103}\n" ] } ], @@ -222,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -230,14 +177,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 1.335209846496582 seconds\n", + "Time setup: 1.3694641590118408 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 77.6015625\n", "==== Generating Proof ====\n", - "proof: {'instances': [['c2b6968dfce66ece687a00d15dea969a5dab54b503c9ac9d0ad01308cedbb32e', '0100000000000000000000000000000000000000000000000000000000000000', '9a4d000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x17e3e92d6899f16159cc2d80e78a346591a02259c9bad95c6cd8d3576a7f7e65067d256f6d661910bfe5a074d29b17599b935cb45f657565c3020b150fd6c6a21310d6a6bc72fa7e8dd0d9a2dad3060fcba2caa288d49845d512c0eee685200b0b810cb2ece7de854c5c702d108cfa64d9a72ab3799a1cfae65ca179215b730d0f8c6f74e32feb27ba887bc573ec8d3d689e443abcb7c4b5721964ec0391522d1965cd461ba59ebef252c2697bdd852305d598dc61de9603c28a1b40a70b4d1a26a02098081bcd2f36d57539826d01797cc2e94bb0c717c2004c3c44e3cdbb7c0f3ce5cf4502d427b5dfc0f75a2ce2b447badd4dee996c027ea3d4f1489c3e5400f594bddb0cc64f9c38f4e294f589517e7368765790a1c27c29daf32fdebf1e02d51bcc7f3e7fc14b8306757e5237cbcaec2fbbbe6e21af752860b41c9edd6d24664398d657e42b76eb4c45152c942f16cee50948789eeb20b70abd12505ffa271c94022ee74b9982745f8d37896f027370394c37e239abe2ce85c449723dda1e380b983aea0897536669e23f862660705e411eb4f8a079d275f1d97e77b614020318f8c23e71c6563b9643230c5904b1debb71d2e1058015d0d3de37e97c5a13610a1ccc5ee447b7f16ae7edfd90c763ff30eb024fc01207b23d9a6a78889d190430de89e5440efc0aba8fd619e959bccdc11f134665cbbab64af3f3633e412b3a06ecc2c319e56310f2b20919d817f63e0e750a09d30451c84d64ebd07075192faabec49d03fb646642c172d7d1e994a062cb364cd3616d2e0e54628c64bc0e9761ac14ba465eb75543bb04cbc1666ebe45405733c304a82c3c50943baca7217f8af7bfd5a504df8b1d0680264d78c3e4ccfb612b144e6d9464f297b82d5e2ed261ab2151ab8688c286788498ab0cfb0e69c2d7053d32b10b5085d07396ea2781c8660d65a5f1c2ed34f535ff6393869a3fd970a0448013c255422200d2cb0b6e850ba02208e8c0ca026d3769befd255b0c1e8b7ca80ca9ca0f55ae3da92d0475526d5dea7c4e9719bc3290b51f59670b0afa589c31b7a6d4fd0f2ea94edd1d3eb89c4766f3c9d3fed6aae0a1c7a2db57f09836d0faa0d13f104b64d31b951b3f42370d2463dfef363298a3d7357d1e476a7ae582c28e6f2e75d11ae5844a15293980941b9e4b2cb2ef2bc6d44ba5c743e226ff27695015151c5de6acd25506537c3fca2661220d0682d493be74f50060573bf1674e4af2490d76bb82c7cf0bf778a985ac7d6713f6e0abf7093f5cb1ea4830dbfb1764673b11000497a3912add2f9fc09ca91b938d622e65af3c411911091f669881422720434ffee487202916afc6c78efb3e66723d2959c52f6fad25bb5b844285d18f54357e346c210a1d8ae5016cf83322901c7e5bf1821f6d8ccf30412081168d5c856e96c174ff3322666b9c51654378adbfe21c60cd6892d03e064877dc90f8519415c148371558292d706c1e8dabc39b719a70bcea8cf3552653cd5e0773c0361af579defe45a210858d3441103de43dba5dfc01b13920c253c7c2bb858ac20209e550beed2111242acbf29cda85b0a7ff102ffdfe72e2616e4b9fbcaaff6b5d5ae005242ffc3a1811aae623ca16162931ba174f51319bb59c08b3d3cacac0acc6ccfb11ae2e311570685d426b7b779821ced6503787817f5a2bfdc4e0849bde373f8fc0dd4b94215b6583d73a7b70e2e4d04b5f535d2601150e36ac2e9dcff6fdba0a7065f7e123ea300cc2fa5bdf828ab5c8336b05e83783280944ed9d6d14a2c4c47e00e3fd031e37159bbe6caacb460c756a6da35ed8cd76d304ac1f8725b6222404202a3c185cd09fbf5d4da8aececa3f300845ca483f1ee4f53241508a1561bc3feaec842fa7cb4ef3f091457f6dd5606dc60a090b2467588b3d991776b7eb607dac4521109cfed20e1c4fe68061a6d5c259ca816c7bbbc302fb6ea849bac0fe148133e72bc4cc29b13f81594d779bcf65ee4367e576fffd87f8f837c514c9f51ff7c7e32c20c52b6b8bb4417d0fc092f5dcc305152ec96602a5577254edd37ba14c816110db45728b45b02813971ddcb1eac093264d01f9fff8dc2e6a80bedc8d35a0fc1483a018e0232fe414d42a25a5417ee98d4da61fc51182cde71da907c527ee36153c603c75e890d710ce911f91c5c55e5935d40c51effc0e07f976170824b5060a5925c4957efbd75bf4576968b67e7772bc2563d582a6607201fda69a7e50e82df72374fd9829d6d2320a58a451db1647c467d69134c547f35d0f72062e1e2709fdbb5649026fdbf9d78e07f3d97f8ee13ee83d54a6ed8247c81ffcbd05728f0101edbca10e64490801483abc0313c5976ce21519dd2856dfe6cb3b174cf7d602d19c187b1055f2cf649156c21b11e2faf0578eb28c28bc845e6a65cfd05b4b22826f38eeca6e1599277bc631d6c7a2f8ca038c8e993f05013110dadd6016412e6d82137eafd092d4d5fe8666302b924f7d735fae5d6236ef4e014fdf8d3ff80886def753b48050d29e5e7c42b21f717c58618c38dcbc91c6ffdb46e64abbee282161a05875205e79d3d9f1e9aad495efa7fd444ff9e4ed7e97392b83aca68a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ed2e11c65ec3c064933f69cbdc771ffb219142fee0e56c358c5a22bda325a9248c46b65dde3014cbc920f3ed443aa55e8b5b2bd1b1a15f71eaa91de085b8cd0e15d22f63f47f28950c205993c4ffdc19cfdf65142d6127e694e1dbf48946b00727e73adf5ceb3b3a561f8a1fadbfef449673d68fff4df22ab363d361060b3b2b67a887e247d298d6131693eca25f0646220377a48aeee5a910b64fb5c59ff327a2b0aef9b77632fcb7e2962702504c461ead4d53f1764e1a85df7394e77e7a0a6cfd3b461db5f1a58612fe2ac9892a2a4df508b442ef806f2228705c8c51511931ba0a5b3ce50219334ae00a0c077742b0f1de9e4d045776616ca05ce93d612b03ca27f63dd4e24d6cab6dd8d4bc9ee6bb7d80aee197dffca50706d3ea80b62efebf5f22c5448fd7fafc231ddd8fda7c0dc3bebea891a98c725341b7084d1f0ba18294e13f845022a608f0975ad5bdbc85488e0944370c16495dacd27759a42c624ffe5405f3645980ae2c1f54dba073efe504c3ed7f6d0eaacbac4def8f590fd6fff0f18e9aa22f371c3220bfba332fa038191669eaea54819e2a6d9fb15f22a41c1e8e0c8329cecc384aeebb113d3502489af2c606825f9fb8ff9532b97a1b1fb44f4246ce9a812c961b1d80c9964087955485e97dd2411e0a1e203417e60fe3db6b7eefab51f19d953f5e14e61bf0bbf53be27ac76a34ae3060762104c512c287a3275bf656d20782ecc6bc79d3225ec8a42bbe79b6ff928da9282540721437e5da9de13b0952d4d62f78567c1cdbfd750af71172be97b3056042f1fb4503088c9d43162396ae84c02256ec9117a1fdc9682a2004e9aa428379746138452ae08c39c9d729cea186d66253743a91438395db6cef972ba4317844c9d7065a102c424277d27e624089dc85802edf19b3da1aebce4bb73a53785ead6df352a01d302f999ee05b8947852bdad364d114d66f8342dbde024735bc8071efde594023de2ee10edea3cbb74f7b7678eef18d48539dd97b62ce8e4f2a35fb87f80768234f86bfb8daa8b494d30f74c33773ca28c75da1883f629d563fd7a2a8ec26cb1db25b4b835b13c5561e2987098d1c2df9ff7db2a85dc787adda332466af4f2e', 'transcript_type': 'EVM'}\n", - "Time gen prf: 1.458878993988037 seconds\n" + "proof: {'instances': [['c2b6968dfce66ece687a00d15dea969a5dab54b503c9ac9d0ad01308cedbb32e', '0100000000000000000000000000000000000000000000000000000000000000', '9a4d000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x09005856f36a0334abc86dde4da7d4c7c2292203ffcf82c6c7f1ca6d4162e75b2f60fd629c9c402d7b0a377c13f5092827c8269c931973f47587b0dbfe209a4c0313116dabdceddb76197d862b867834de61201d94a2a82c499f79b37001421f1f6e48f6426c41ff8bc28ce95c0b7a56f6d3c0fc75cce976521238276f2a96e92ea7e60438d2b59b781d1130a8601e1f6135b8083da0c8a65833b87c17f7e6bc03fddb04d41294895d72348f43d9e9820225195a3165252fb1ce5aea84c7ef5d2ddb9c2c0c40d173d2c5bd24624a19be7c57b5241152a18b6b400dbef04182f3173a8de204840c6dacdfc1f297a09f5af07daae2a6f3986cce2791701b9a2e3512bb5780d3f60d1fa11e5749780074811079f109ab8c6483f5af56c84914ec1603fd18bc54a223b2f201acbc20e464f1566dba45c97f8b9d3adfa98cfd73fdb3215e4dad3f248ed77e187cbb5f7811834bf6edf2d5dd61652740ecb53e4f7d712fa2b15d4f84d14ba27ce1b0078b595ff34b2a49de3c8c659b3f8e106074f9bc2243cdef09c34550e5902630b39b7d7dd845dc72bb8204afe5e3e16798066f1e2ac449a72c8c0c997389269a957e6cdb3409fa67ff4c4b445545738bd09b278c19a441de8959332b9681b675e8a9b84d67f55cb8f6d4284621a606360ae646962b639db3348d8a95a543e2ed575cff18fb854af82ff51b4a1b72c5c8219b25aa27a23e52ebf2f074fa0620f958431e6bcedbaaa401375f052c7f9c1ba5e72a3f2f97e7545502719318bcfa6f313e9ea6dee24064ec02a85be47d36c6d77e00e71623da20a66916dc8e21e11735387a321eb2910da16466ce3e468a054e5a8a9c0e7255ec7fb483946abf4bc80106d7e1855bdb13c5774a54b6f3f98d7be18acc162d78273e765b7bf5373a3f5aba1d039c8e726d40ca07e013355b84f85b9d17209c3018866bd860c89d32b2d4dd383364eec3a9adaa6d1040da32f50476a4a10a61082992c1e32528c8f9352e47e283f2d6da485a0568dbb39dcad89115fbcb01d8bb47a90e95767dbcced3d09192ebf7554f619151ce0c064ada42aefea77e08947285152a5863e9e2e968f0234e04545339299ee743855eb96fcaa3838885255dbd08d33cc2a994cbd069b6eb4bab05a3be5311ae6fbda5748df3841ee70200edcf9b8e7f135c0413a652e2c47df7c875022095422ecd3ddde17a34ac5efd0340a5ec7d025c9bb478310fb0f9aa52e78ebbcd48bc8119b530e2e5b0d12c27253be662564d7399285159d82f55d12c94b17dc99f381b8822c38e394bff360a0e5982a0c426f12654fb929a6daf4a3a0ef22e8ec229998c675bdc458349b817124c5dfded475a9439ab3485263e7ac5a040b8884789c68741b8532cce608a122cae2b252a7ec6fa3725ea30e3befd12f364010446c7bcf2f25463474172a5d6219b7fed78a0e6fa94501f882f9b89c9228d019f3541abfe7173b1b3890c2a6a0d8391ac9b34daa436a91e0ecba0341c98911b752a81f91bea6525f7fc0b64a52723bb18d3cc5ebfee036d8309156f01e70b4b8481c1a38381b5be99b93372bb054e9d59718db9a1c2bf9326ceb25430a29f8058d00662ccb58f90127239162718eebc44244ff2f81fec5cbe1670473b9f4395d1535654a0ded37fb0bf92fa1a0b73c7ebde84b4dc338e1be3d6a37bc35085ac5cf2b153b608671f84fd015af20b0a1ec9e5591b9cebf741ba1db731f9b5ffcceafdd53fc1ebba60a1b7ec17871c43de221c4a232fe6c9c48be57a13006c23ad6f579fa2b4662624cf9e393f0409a5f3ffbef047cef2de1d98a3f8f1918e56c4e9189d0b328ecff85c0ce30928024e71513ea51749205868b966443e11e16a3a7540815634054cdfb558cfc64e08cffe1a1a06691d3018285fa77d160c4fee88782429c0eda3123a6496766add27acfa16c3659e135ae6d0fb5a451c65a6ecc05f285c787372e97b25204df4921aed8685dae2c71ae297ae6d57e10d853c8de6d9c678a30e7434bfd352eba407046601634143320dbba70d25e0b50509416c9f1b66931a54f553a5a3d88f75e51286f6b1b8a4656749c4a86702d53be5cf5643797a15ab3e1fad32fe5122b918173871cc25a06856e366a79d09fc6a68e32aacdb492e4fa478665bd4e7e7dbff14c92bd7ef7b1a264a9186c38fea5b2483b3b9bc831fd7953b7bafc8ca3e5db90436c0c548cf6787513cb5dc9afcd4cfa991f44b06e995658bc857d8dad998c2210a2f5c65c86352ac4e13ee765530341c10afec2f72d635ef3259b01030e5ec2714b8c19d379efdc0c2be77c281a064c315dc8e8543d0b588757ad3f4d79cfe12fa3e2a15bc837c7a928eac5bad4a2d9c953b37830d7b2a1522018cce50bfa420df6d28b859ba733bee3bbd1f893f1c839bb40c200ac02b9f0e81d6bb96411103403fa4945984eaf4bfec6c53305f149333578c9d799b10e95103701094ee9d16e4a9f6001ee043a667e6a4da3734cbe6f810b8b284c75bda37da900c4e4cd8048647f6d492c7680d3e9b13857d255a90ee643580ac0c658e763e6bc48e2e50056bd19a6f1f3a258129cd17d17b38e0708fdb791b251cdcde85e5dc5774a5d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c21c1e6f48d01ff71901623140ba0e5423c7dde9ea1a7c50c05beac145ffee41313c605fe2ec693baff768bf571e4888ca47a74e3bd726fa2909d95dabe8a08124e138a9ddfc2c1fa4140ed190a8144babbe71a34e058ce9396ed84e6e8c6040d0e1fa7eaa787605c6234cefb654c209e20377f7fc05bed862609aa5e52fe0a22003682ac216441cdda091c757dfb5a8dc93385af51b85f39a38c28f9d23c07133698a0043a37f82d5d6bf8542fd5acf564423d2d740a8a37e5ad602996c751004538160ae51cc43231c0b7fde87b6f79128d96dde68ac1aeab6ee2a5dada5f1f552bb5afcfb30dd5c1af8c7d500d8b7dabc2143cb832d559c4c05854836bdd14894dd354947a9fd841ab2027080de1874e82ece0603269ed4ba87b84b32fb2296da29d56f4548ddd2b8814c2546959ac52f896078fe01ef7747b21a553a367159bf728181bbf1cf17d01595d990c91c26b39e2effdd632f7bda16b36bbf8f8259f6f13647f5cac84c5ee123f820d759df4946af4c3ae6b472b502116d06e7e11bc1bc5bb9c1e9d43c753aadde93cd1b8385dfe73c1707efb59f6ee9a2eef0616a7b2503628986d4ca4c947aae4f5c679bb125ba1ac006a001d97ce75c6e9d8174e043db6ebdbe22ac737505dd93affc535538aa07a2b506297b6ec969599831b056bc751741c5039156ef5022c724d4e03cd21a5eefac8f74f7d993146ee9e02817c2d6661306b935183728f1a4c722893fa109f96b7f6a513a60b36631d1d11fcc0b1c52606a8826ff2f5e6de653c2f96b023c12c6387b5eea356cf8675ff1eb1ab707fca7c08ae8a7e109c4f8c9d5aeccb404140a32f04337a841faa869b21e66cc3a1ca5f0c5fc452d1a77e4819355a60f003c95e1c7ece5800e75253531a11deae47682c7a7450052b35d275125eb409c45e14afea79dc88d3a7b2615e066c8cfff94f00881710cba57461aae8881c8d0047b85fbd47b3a55b539031790e64ad193c6beecf8c0327e2542048973bdb27733afce6549254c599635dbc3b190d59571ab7ca2210263e716d8baf4715f485e46264bcfc82340f9670cddcbb22cacb4db562c6802c93d55bb7c1763c2b5e496d52cab4bb28dd9376bf8cccac', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.502431869506836 seconds\n" ] } ], @@ -253,7 +200,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "metadata": {}, "outputs": [ { diff --git a/examples/pstdev/pstdev.ipynb b/examples/pstdev/pstdev.ipynb index 0ede233..6739830 100644 --- a/examples/pstdev/pstdev.ipynb +++ b/examples/pstdev/pstdev.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -125,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -136,17 +85,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -167,16 +118,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n" - ] - }, { "name": "stderr", "output_type": "stream", @@ -198,8 +142,9 @@ "name": "stdout", "output_type": "stream", "text": [ + "==== Generate & Calibrate Setting ====\n", "scale: [3]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":1,\"lookup_range\":[-20336,4],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":2722,\"total_const_size\":309,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-4,4]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450967707}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":1,\"lookup_range\":[-20376,20400],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9932,\"total_const_size\":2113,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-4,4]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709725506897}\n" ] } ], @@ -212,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -220,14 +165,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 5.9353179931640625 seconds\n", + "Time setup: 6.595102310180664 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 14.5\n", "==== Generating Proof ====\n", - "proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7400000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x11cb77c7722108be5953ca6860f3d54a1d29fc803afb763b4035e1d19c1deb5a088bd83ef7471824b53a6bb594b53338bf74a2e6c23ed96398ce0ae948efc4f111178421bd4b9cef52f49f1334428843cf754066550d7425f281dbce5be35d731f2f20e170c0c6ed65092c6bb6ec72ce8f144f54b08d9d45740cf0e8cfd8f9b32cbe22b735e899fa4d6ad2f0235ce02438df8d09b130113dd22bc7bb050c319703c21a7204d46288c4d1605cacf2b86d83f8ae33e8c43a2d9e78b4192262c6511c95e93e8d23237c4db27d6537c27ee22188414fcf4f8d3292ace2e7a0bc938d21dd83b9a003f979e018dfdde5dba0f0442863159e86988bc676c7760e04bbd716a95401e3d58af0e20ea614c5bb16104a0a4925ae5de30058fa81642399cf311e231b2a6673b5a8917350c80c190cf8bcc3fa4823257f3b89f208a5a160f53a01e12cd90a8e025aea2791d19bb77d4bd40740cb2afd5f93b5e209c71caa43a915c67013248f2346fc8d014737de7c419819f644156933aa551f4275e3472cc825d734560283ac3fe43a163d3fff823db98b59ebca4fab93416a4b2bb87ba14f0b745fad58c922db3a781b0388bde6f6f50c7bb5830df67819d81c22c27f3e6826635726fdabd30d30970d9a77e52e0638018bec04c3e23aacca49b0b7dca54d2adfd271ef4a9b4df049e3c66ff5075b7750a9d0d56a878a6e533f4f1f79dd8e2c9b90d78bcf17ddd2df6655b92ebdfd4ebdc2fc9a018e747a9dc9fa2e6ae91f13cd0026093154fd6f99eaf87248d0db021410f56b57c84b0010b9b894389bd100577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f911809b4ed29928819ba29f18b7354730bbc961d4207ed82d183ad439242b748c31c12e7983bbddc896649ec62ff24b698915f9110edb90a7b23e26796e658ad311e00577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f91180c3c9ae94c21b2454d15204d2d3c552ffed9e388b3aa05d986c42a26a4861b1e10c7a75a29e2510c79805e73656e8a7a51bf41ad9b5573eeee6f541328bb7eca0b07ffa4623216a629dcb9cb29f538e24c15bf48d0de8734ec2c4286646342af13700248b2b2468d0776729cdf232c1b3d6267ebbcd28f21b5bc2fb77167eaa00b07ffa4623216a629dcb9cb29f538e24c15bf48d0de8734ec2c4286646342af13700248b2b2468d0776729cdf232c1b3d6267ebbcd28f21b5bc2fb77167eaa0207525ba491480532f08d482673efe7f2f59e5303938d1d6f2a68f3f6776ae7917709c90a917a15dc19f70c3e8ffcdc1ff189bedd6b5f809172bb6cb1351e39710874401852d7116a02620b52e907a4e80ddbff005eb0f31e70705a4859841f3137ed181708b8e7d6d40a46af0712ff97a3f1bae4aa3c79c9b798b982a2ee83c1719c94c63c7f5de2d108a4f887adf6a8c82d846ec6259b8aa3ab26d546e68eb2fbd442c451df957d6198f7b065203a9e822cbd2832582ca0f9808b7224e2aa4150293f632418b3f3563c4a3884783a7184c43b241c5baf8aa803aa563eece030017977335552ce4ea7697aa4c7b99ac88084ffba220469ecf2ca0dde1f54b9e0a05116615a08dc9cfca91a698dd703f7f741aa8a1fa2addb48537f742ac750b083af87ff6f87550a56cf669aeb74fcfb34a4655eceaa31d3b4764cf99f2572e1fd6048f657203f4984e02f1fb7be61639ace1bb6df16a71342a831facaab9c210625b106a0c03574906db33afc67ae742959e88b6b047ee3fe04c950bb8e9310d5d2b8f5811c3a3c53b1eb94ced464954445a236f2c0ff1825a06c782cf871a2c72ccf6f2c0c99086910e1cd313a9f8151c7dcf71151cd00cf7d63c4465e3a42d9b35d50e2452c825de06d1accf7809c7b2a1c16253188ec17f95c63eef91ec1b4590c302810a9f11fa81aa42cf0e752a5f4a2ef98d6b492e9a55c5bb89a4ff1e028a798a6710422e0fe662a2aaedc6be86d4b267ea7552d3beafa81cca4c641a53efed7cd65b094958dfecdd65d80571a66a26180bf302df9365f836ecc2e21c65c4222527ce65b9bd1ce2b652e71f939dc1a7586c309a32485f16318998c30c75762b4054c28f0283aad26b349d20d93219b46e855f3faf7d9bd7ae284c6b053c47bec809ff9e2d1c04427c0f35c8821a79e6446da6d43f2ddfcaf73491171129c540ef7aa75d8e27e7b67238378f0a9c4a59a25ac8d3584c3e2ac3968bee012ac055a31c34a18431ec0d8cd0c3c79dde659c74bc4a0dc874ee8b87671c6a184344315cbd71d1c830bbb6ecc9aaee2325efc310deeb24e82e5a1a150105640cf18086920e7e1cae344af73688d3f4c2772fdb38f2b547bc402beb2bebff56182ce9b9fb550fbf59a06630d4f0207caa7ab595de2e43e6b2d91f59d46fd26d107670272ff3b0ba4c37b0fac872da6b4aaae71520296b36d32e61c1dd8c1757130eb2a1488f7ddb7cd0f8d24379befa6a48af6bfb724e5cf99d3d3f02b31aae2636316ab1a1e6676a5c37d59984330472c117e978bbc38aa2135db636f43ce20d6dc24b3176688738e8c86edf370334b961ada79faa980e31e106f4329860bc2d935fd2be08ec9228801cccd9815cf707e91aba24e9e8d5356518d4c8877b362ab2e0004c9625079c0edc751d1429fd676781722a0da89b4dec7a4ab50df835200ceaefbef8e7287b4ceeebe5e2fc872d6f3730cd99f18b3f5c23724eb574141b559afe3efc1da91b4263173f57ff2d7709ea69de0d8445427799400a85351604276f06193d00afed0bb08b8c5866696b20fa256ca7996db7b793975fdd93c824a040783b6a570b57dcde15ebf8bef4c97f1846c1654125ba04fe123977b3e7222b5dc2d8da5761615e145b46e67f71345a8dc881d38dee73fd644d53c766461a4c620d0480b018c33d5d78f1cbe988ea90508f21d5acbf277c328056a7c634057563625e005120c350b618ee0c77a78e98f40fd97c1450032ce80986c298112ac68b670beb37d0e914e86b40f99a8f38f3d118b4dbed5f4201426faa4eb2a323af991ae4f818a469158159956bc2cca9bee15cff8ce879852795f0bf3bf42221cac3e2dc19fa15645e8c42a1cc6c1699f2c250883af54bb75ccabcca5fa1640edeb61b41ab93fe7538aa5be0feac1cc49515bb69e8f1897d26e21e18d34d2f22ee18f0de78771b819b6dbc641d20c7ba2b6d27ff115709ec093c48cc0ba10a0460439ad9dba3c750c874d9f1b92f2241c4784dbb76aa70169f2ccd88a4969f071fb0b0cf9c0cc4646a5cc31e6eb5135d9f2a8c21f2c1d336d81884629bf1da10578a7d5a35f33957e8c3960dbe8fc842e09ad0eba2be21ed84f934be5c66472768172285d5f3920c8f691b84889fc554183bbb7209150ae0339238128df81718d5a80092a5ba0bacc38f685df763384bd24607508a9136923cc84c4a53ac1f0eb2c9cd836b87cc829c92b21c12e4cac95221220b84044f43fe0b4e1a56504a2bc8c881addcb02916504f485d6dc3d909ecff131c6447735affbbe4ab4b7821187900feaa1af6ee7ed00a8b33361d1a726a855fab23c9ee1e2b679a75d75d1e1e87212a1f2f9ec4f9da76250cff080cac1b0dce4437eb19f90adf6b5324bbf719c9eb38d4798d657cc8e5a0771a787dde614b449e49927cc09b6b6683bf95c619922dead7bbfa86bcbcff057023d121152fa7991370647220cd2beef2b82b9117cc07966b38024a5b8fe4b73995fa2d0f5ddd2c9ff5b29fd93db6f322eade82000000000000000000000000000000000000000000000000000000000000000000e588e4f2e72710557881077dc43d96bae93e0307e94f4b3cab6db0b6ba58f600000000000000000000000000000000000000000000000000000000000000001a964d6ec4a61699fd2b39591384f4589626fd8613a3ae2ffe6e30ba2adb82b9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008503f9193ec094f20ec16560e3369505c5cc2e082357e4f0d0de647d4cbd4db0000000000000000000000000000000000000000000000000000000000000000088161976643d06d0c2e799ad5199aef2dbd6bccb426127f4bff3c03f4b767b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000221b0e882e384750aae98bd3566947f908dec2071ad0dc85220f24ae17baa4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c51963eff481599437e213a62c7c63c82395563a9b60ac7f4845ea71ac25e8e2424a287727850f519ff4cc5acb3c4dd342bb9e359ea9e68c37d78592062b9320000000000000000000000000000000000000000000000000000000000000000103f85f6174227c81e59da041d187276df8d619e075de89b741ed6a09631d5ec00000000000000000000000000000000000000000000000000000000000000000cad3cb19d392a96a531be658cce5c5ca0827c61e1de97e5b24b31e02049bb810095ac68d38da3a6445e562963c8fdefd4fee01a9bf54bd6afc1af4af3c4ab112e10f9a23bf8236170303d838020df6d4171b206c42f895c6d5a6b363ea05ad5145d7107e09c1754fbc68afb11018b02483bb001fb1f6d17040242a310b404fb01611f1a4a6468c33d14bbd9bad7077ae9671fa4c2f0ba976e36edb224929e8b2a4666cb0e09a1218f79510d1344c836b06f0976f3842e4cc613e313c3d8164517562577045c83184aaffe79e3ed3d4ba3431189ea3d73ebab17aa82167b93732e3e44bea3fa9ec447d440d86a2bc64c28e41998cbdea7e12193442ae2f3e9450275a5136e1bb6826401edf450cf2f2fea7c453c3a7386a885df8acfc972ce462ffdb6629a11082e471b18e166423557584c88fc54c9728bba990c24d72e7300272d58b3c1dbfec82024c93f70fe2b561f436610e84c01a134069d9e520cde1c207351a12b8d682ad0e2e54edb9bc458cabe02be288c5a3fd11b6a5f7d5957ed0eb24dd87a06e826c249d1dce08f51fedd149aebe36ce343b4f84381e30204300605c5842b0ef7af8fee98d0cd4d4090b4394ff4a2f1fd73a09372f78fba95062f58338e8d6835b62331f22b6f8521b88b69bf2c85029e50c504d24ce12cdebf02dbfaf4f754315cae011e4588ea162d8a0d279ac94658d9da61a1b9a38d5d281bcd960ffe563c3344ef0636371b200a6b088e68d3c64709e9c30343fbc482bb029d492011df4450bc157c109a3d6249ca94e19252d7f7b6a82210272627152b2a9ab27ef5fdfebf575b21b031b1ad5b4daf91a7fd8c8e14b17bfddd9df6e9e324b32c8249b6189f5aaae3ac004bd91d9b62e02e1f9ed96522281ef95dea6bbf16e697da4089e5ddf3c4fdc8dbccd6ae6d9ca7112f52086d9ac4fab58c60bc602b11b0af539587448b8b39dbd346a04bf60ddf05f9b7e0b199a5032d96e33a152bcfbc14f65eeedc85027a7f8cf3f07f55a3099a84daa61dd3849f52ad2a738516c20cdb6131b659a16d30d54e050ee52f0e016d84a6d70c44d7fa59e0aeaeee1211e0e6aabfb85a25ed5449c8d12e1e2ab1e322ad3b0d3626213fda8d9e27b3273da594ef9575bf69a5e267456143b06c2cda2fd1d3db9474ad9e75d823d38d17315904afa32d4f645974f5a73f7e2bdcc4c2c5466dd9336c4786f447acb052176bc016f5780e7faa810b63c8b46d91c5c1c0859759e875f14fcd0d26cc6aa11257b24466f82f787d67d4e3d50a2ce8a01a97e44eecb03ccd5d6facf1ab70311f469578b7cc6668981120a06a561f5244f428bb9a01ecf1880a4cf726c358f303937974548cdd3f0f9f5c749d43f7196620e8f4d1212eb3e9038c2adbb8236a128643be8b018e93cc95dc6209888a228f3a274825c625bf4aee8245e217c70817315904afa32d4f645974f5a73f7e2bdcc4c2c5466dd9336c4786f447acb052183498d372faf5f80cad2445d04eed05a5d542a5de5bf04180770f96c1d54ddc1cb4a833974b8ebca272625f8e2a9c3c5d044f6ed686d179c5d4370d80166a91085460c8a68d7183d1761c7cdaf52765da588d99065d7b32aa0e86fbdd787cf5038a2dc27b8850aee3774847c2167d27d2239eaa19e03434462e224ed7d3ef110311a6b5de23ed4df0264a5cc61cee069d3257b09845d34017670da19f76ec7a2234fcfaa8fed24e8891acdc7e0c319f63b57b45f6b2788b71c38ca0b00b051d305bc5c670134a67f0d6e47c4a99050226b8775b63a77561ef2d909dee9cbeb816d14b1de87f9628b3ddbcf98973fd60c60203976e4b4f1d918588f786400f8b2234fcfaa8fed24e8891acdc7e0c319f63b57b45f6b2788b71c38ca0b00b051d1cc1c1764b87c1b1122a8f87b029279c331ee0b34e2362973a63d4a8e318bb8127dee75825ec2ace190bc80f31b67e7f4694df230e4ce9df3d2df8304395c2b81cf5101db3e119bdc848cdba9755f9d48867d0fb964b2e70825ae46362b984f21d8dfbbaa5c61bad2e6c0cd03ce1f3828905eb03f4dba85c3df60ca29a6669b3', 'transcript_type': 'EVM'}\n", - "Time gen prf: 7.377405881881714 seconds\n" + "proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7400000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2c258c1d06028890c0e592b24c3f03e6232a0e853df11938ddef1663c645535c0257d8f4bb6cbb21e525bc815674f0eef75a861073502ffc2d5c5fd72776aeda108f742c55b4d09a7e95bffcd3ab628bdd01b423e760c050a262de6d587960230d17b57d509b6cd702394dc0c8a032ec4c3d49d390af963c0da0ca479fba5e1210e1cd0b6b5ea93c95cf43d9ec4a54e67dcbfbc9e550a737c5172e2802c917511be9470f77addc1cfd66a902490d50d0863801eea21636df13cc4931b7abb10a18d2204d8414536ef641a45c10957fa86060ac7525df72e16e58eda44db9ff812055b6cfccc69657bcbd49234c62ee27753d4cd90de46aa12f6918db4bc60a64223065f2be726ace89fab2d6748fb97257e1127dc330be757a2c9b053c8ef64f1b788fc796b0536c24aafcf34961ff64d7c2582d04c4149338fb1b34e608ae47075a54338515dadcaec43ba68383263ec825f33a50f9714ba32bda995fb19371032110332284aa781fc1137983129b37b533cf36f2cce15e1a5cd49807819f4e0b6c535b597cd82584216072ad28ee8e885f40b9239b30d4b156e978cf77fa2929b97448a953f90755c5342f64fa1f3cf188e69479f5f25931feb75fd2b65ede1aeedfe9ba18450e9ed531322065b75c7cbff3f2e6244402a698231a70d4195f2769e588244705600e087a7e2298f37a05055b1f86152c44501754644d523cbf0d4fe6f9e5aab1d4dbaa35048aa4e26dc911a773f6edc71694f470b5bfa62bdc1d3b20fda1c00090d04543cf05c90cbb903c321e30ab3389dca37d94895c259e16f7a5bb124ee7d33fbdef5ee22e6b3da2764d1b7ef8338d670e47910735159b04c36f8e95acc8b521e3f0f6bda81d8ad087dae4397cf12c0bd97b4a4a24242910923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412e511cc331625d8f28ce822b70bb273ca115a396788cf46682698de807a9f28a2a3dabc9113046e59881af37cc72e992ba39fb6896d5a9edf9ed176ed8182e0710923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412ff72d37b657a433e775b98e4f0c65fe93c06af70de3ba12f6bfd8cc57af10131cc4460a9bb7ba15d18e3dfc9aab80e0e153b97ef3841cfa58f4b6b231be74cc2ff72d37b657a433e775b98e4f0c65fe93c06af70de3ba12f6bfd8cc57af10131cc4460a9bb7ba15d18e3dfc9aab80e0e153b97ef3841cfa58f4b6b231be74cc215fba9502a8691db70bdff8b96fccaa50bfa5d7c2fb586126dffb613b93502026d9759f20688c1edd359a2095e1e009153eddb6dcd7b2a24cde6bd8af0850182d00dc356b237c0ba9709aa6aa9d91e11fa0a12653ac1f5a7967bc1ffe580247128b93ddc5652cd447968919c5052c6d3d7d8bb9a922bb9a396764ac677b36c32d9bf602ddb7e95f4bd12a85ccfc2419bb654861364b26f758fcb009cafad3f4195c286f87e178d4be7a232523bdad4da2c6c4abc921be890c55818cb69cd90a03a15e3d91edc38b9205b65ad32405d921d16b531c0af84696a7e51ca6da91b3197040e152c9535bfcee2127bbcf58bca8503c316691f1b11caa5dd9df0a696e0094bc248907a8efecb1a76c4d052a23ebb0e245aa30b909c19ac3c3f67b4e070a42b3b8a2bd56ee1cc057695ce2ad1767c079fa952cc7c75df241c8b61624e30c36e72d900b4b83b5f26bc3e84cc450ecf1efb81117b65e9519dccd76b7ef72249306066c6a2e56c2b0f15ab0f5fc96f7bf5ce33f0e3b302d9ad10ee911ed0d2e94bf404c31d5a4140d52a2b4799553afc093ed5b19ff21b0e70c9720fcfcc21812b0886b394ed088e9ed39f6a696fd5a82a3c4d74cb0c41387b9eff28fc5d62a04bc3b2b669dfabe0f5691dfa93859307d13a16f58100e0f4bafe8b727708a053241ded6916abb5a31de5b6be22dec6b3960aa95c326c58f357b46c1f87c1e0bcd0051ef838fe51d9d4cb1fc7ff531115bd2e81af22b87627bff966869928919b3b2400257f778dca54d9ae47fb978ef9931ebbd8ed3d438ba85cb6cda55f7188968124cd32666d2c4e35b5ca8760287f18714ec8d11cbb58bdf7a928353b4267bb27587f060a9e0d2af499bc6f0d55fd8f74c3b9dd929a0a9757491ea8f822ecdcf5bb23358de76af6375083b57860f3fcf5e65a7b6042e17f219575e8a7c0d4043b15f6fa20667133beccaeeb6ebc4ba05b910c5cb415bb137ddcc559788288f023350442fe0972ec6f41a9b8edc50157a4c14e4ad81d3c8a6ca702bbb722d6e11e3bc1f8196d0987d18e9a4f4ff006d9c841b40350695a5c03d1657b92d28ec0a5b86ca4dc360da2e6963b1e6d963f9d0b862b5c423ca22657c6b2cae2c1ff55147115988156356a7c1c987882ec92835b864371935c5e4f91378a59aed0aebc9a4ea1b078aedba874a07b80c37af303d151b7ad6a21220b6c324f07d622626171316ecfe2fbb3c428c3bcbcd7221f3289714411f217ab2d54d11b601922dfc74d5ed95640c5d19b8dac46f37a0464c1abd3c29426396a776955f64b46c2aa9ef7946d991c0ae8fada0ef59ce8f8cd9e5d018335edf6c694ba515a71df218972e6a6159648ccf4ec4d432a3d1fb030e4ccf6cb5338954eb850060563cec2832e16bf8c0d54e35b00aca05a41e4dcdc7b0997e5a5fd23108e78f858cd11a18ed53f357ac10d991771e9595abb3b41dfa8aad6641c5bfb487906a9a114af3026dfd0a13185220f2708be4b8664f345594e0129c96bb0a81c82b17e6010d88057274a46c293370f41e877a985ff6679033c85b881c2229b54ae86f8561b605212d19c68b361c39b9e26a1bc760539b82b78adefc3b9d6f301720fa2f1d4a7027760d9f5e14105f1bc70f07465ca4eeabee8ec57b75e3287bc2eb91321ec4292e872ee56188cd776df63cafd6b4817a7c8e30b6408762711eabcc74a7bb9c242cad07f17d2e5b6f855a83fafaf3b666d6dcc5075fc7a2ef9ccfa911b9c895001e737cfcac6ed2febd09442b23a042537b13ef7c3a3a9afdb08cb0502cfc240118a15a17d311c5b92772b1a30fcb7c5afc6980ec76d6091e99fe2edc7db9b78218cc8ec4099d921dd8f802649095bba686e11f11375bb0c4e9a004ea1ad546b1147ac0ba9f3f368676dc0b86df54a8e9163df2c8287f3b3a8555b77f22391c95144b76ba701f38a5e5ee050660ebd12e9d4a6236641bfc44e23b0bb2a16e8bf313f3b2e5b39ce84d5f822973a22bc7e05abbcd3e31e7473500b95df1e85b090303bf0ac370aded834520e6680500c7bcb344a166604ef2a188e3530f4eb1d9bc16d90b1f5759531d3862ad242d8abcc0d87302af502f4c95b8e9291b818d3d08097771408888e12715a29322f76857301e2cb3e805ef92b1e31a949bf08f409d037e0508519c4f975c3d24ff1c6a29bcb926f78df5e740f09410ca6d4e90f9d4273babcacdac1ed3e89b150b9a07a28b621476c550b6ecfe34e39e3a3e37cf092fb5dc5cef7673911c3e55edf2da69d8d9142e1739c05d7a4a347615f1ab456e060cd3cb32a3b83420831b5fa676c9b977bde0bd3494df7559e10567a285a02e21a1dfd7d422de6a75833a55f6580042a4226b1507b8d6851214851a7da92a4f26c525da1186ad2eabb403b6a6898521abb4b4804487c17ee29d65d63354cccb2a709df2da5db2b8fc13c01b2727d5c096a47ed96b29864188162471d03f06c20131c04ba61ca1f76812a1b1fcf1ee6e5fe5c79a9870e557f7af4467f7a5f5e9206bfc3f864a35f89185ea733e34c270aa69ab1c729e8074a7cdf63c7afd1d2616be386d4dc20fe5d05f0f0a30f2c073a9b3724aa8e15951cad4a21dca03f9f500000000000000000000000000000000000000000000000000000000000000000888cdf0397052d4cc36ee5f0944db2681116ff2e71a0b13c3d87df1851647c623613e68085ee27866e065e654b0c8175de0fadfbff02b03aae6217e742a70850000000000000000000000000000000000000000000000000000000000000000200ed80918b637a801ac0cf9b35ec0a7a122ac690e82c921e889d2cc2a96d37d1de56fa34d291203575c50a4eb6ceff6418bcbabc8ea12621ed59f678973998c22302b5c47c581039f949baaf96fd57d0a89e1aa90e3a75ecd583749fb67441700000000000000000000000000000000000000000000000000000000000000002623d1eb9a923f67e56c1000b590cf8bd9e989c555e7e5a1c09079a82cea25e123613e68085ee27866e065e654b0c8175de0fadfbff02b03aae6217e742a708500000000000000000000000000000000000000000000000000000000000000000308da194b6ff4065fe04c77d83d0976d2b72089bdf9d28f9f9270269aa87c16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a403e6fd0865222355dd0527f8a26b0f960547524451c190ab7030192bc30e28264860c1618086cd6ad8d3c283935f116b017ca1d83b8949199dc64e6c81c3300d363e4828f335f49661ab4280439ae45096d78b129a3d8f9bbf37fbf0ac3f00000000000000000000000000000000000000000000000000000000000000002c03953954fde122cacab7ff8763e3f416470128591ba0ee50833b65bed9149800000000000000000000000000000000000000000000000000000000000000000ab986cf3de2aaf81f263a126702bb5ddddd64cae00f114436b8bd60fcb38e411da9902f1aafd2287d26a56f17fd97c53396bd4143714e78f5eeed58d356a3a800e377be56f782d238c4da0d30bc492769eba7bdeac51a9ed8d334dc4e0acb312d7050dcbb1f443b34a5c57cb3317c53e71c74c22af7447266bcc2ee38c6b6340049915477f89c11aad16b93abb93c8bcdcc56910e7b77addb8ba7f941dad84d185b6e6a83b99047feb46631ac1cd43ec1a62971d78cb07b9d910b2dde05da3b0f77a8fa8742312ab505e9cee44cf33c9d1899070e5916d0c7dd90790069b73003a3ad266b54a4c664ff6e034be51f51aa8ee0e76c1a91a972aa6ad80930ecef2764f39ae36529677452014a15f6ec1d6eec8f623b715d479a762b4c6398ca762cac0a6c9cd34c7f8126de6ac41da5bb74e6eac7127d4d8d75f3260b67b36d0317e7967710bf5fd6a60918381c7c2f5b4d3a75ffbe0a527f99141b9f235e5baa2b15923998f5ae2fde87bee779f0876b52ae7d908450ea5a88aa63ce24c037212551fc8253d9a72538b5b58f5814096be08e600db23d39b2de25ecea00f17e041f5a0751438242e84eb8a0880ccfdce43d384b49687c9d256c44f1306072a54a2dbcb7faaae02b081e1472f8616b964c488d9328651007bac0215d9254f33a042dd09cf64f6a5b97b6efa5615e5af37ab9c1a35a28700d5224411c07f7d41c6505dae1def2648ee5c0d4f9e3b3eb43324cd0d6e2d7590a2eb62fba79543ee05b03b7775a7e4ed56c257a642378dce5be86d8d491254facdf4f7e37dbf87ce0e328956a915b7dc99b88ba922e2d348d4b96ea2b146e2ae5bcecc209c073ee094d147667999bf23c2c6684a3457dbc004b1c5bf5752d4bc61a69e6566f10d36ce01af553ef313c2e9cbc3a9afe31069bd6595c03a82bfda8bcc028b74731767a232c0e1a54a8184be2073f32a6953a984a88bdcab7806693a5dc59a3975b6582c81dbeb6ea445694845f2bdf9aaf9fd88628c01bca0391e533ef3daa521a6a4a4d06293d268211d4137256f15c5226a0f73c036b831b0156059500b1b2a8cd681c2e555435ec2f578c6774be7ee76ba27b5ab7fde10afc9b3a41fe954cb910b44c07df4aea850fbf60ac6fe5bf54da6f321d1fa15f540fccf71d1ea1173055e09105306d550b04361a1107a8f17d1f262acee3b34a311324e0c17d23b5986b39572613eaa633aafc16cbc4e9bac727e3ba06b9de11e92376c0c9e08c6a8241f8542940cdae8d42673106b6009e0442feda8a188b7d208aa7ed1a9d487699a81b4d11234986e25a7d5053b14327a915c3164238622546fddf6153e753da3e963b1f08b150d64a491d46829f859aa81c5b55e2b3cdf1150c45c1d0b8c76d72a1e8f31c7eb50edce1c6bea88057e320facc3d517e6c46f38febd4c9c3e0a72a48720f1123228bfbcb27398e5ee2f5437ceeb5970e726d8b2cf10964023a41a4f51fca1c711f9509d820bdcda062cab2060934a38c9bd4c4bad7bf44eb59b8a184a7af2940cdae8d42673106b6009e0442feda8a188b7d208aa7ed1a9d487699a81b4d064eb24b2536677a95034cc6c527e33c9fb5a546ed88212ac8f4302a4d25ffde10ba4d9a28874f041f7941fcf6515aaa69ec34c82c64f8e06884dcf125efc7b12c0dd5774fd9d4fceac90e32a81a67fb8efbf245dce104070d3d442f741dfc9008191d15b72c4d1aa69b922511bcfe34854d71a77d2aced15895e79ccca9a4aa267eb776175554ff2dfc35d3e131a04c6ebb1eb65bc2544d5944ae5a16c537ad2c0dd5774fd9d4fceac90e32a81a67fb8efbf245dce104070d3d442f741dfc9012b0329a4efc2dc610aa9c0e8d1d2c06c36ab6b0ea97253c29d0027d7d0a2de005f6b41ba1fade706d4ded48fc8e01e63097c617f99ab8eb7ecde283570cd7342b18d4a3afba25a38e67daf4143cd9644df018fbf82a9d1d706a92353d3de0cc02ac55bd917d264cc0d1e85c0d45db40289172aa7651713e302b934283fa8213', 'transcript_type': 'EVM'}\n", + "Time gen prf: 8.113913774490356 seconds\n" ] } ], @@ -243,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { diff --git a/examples/pvariance/pvariance.ipynb b/examples/pvariance/pvariance.ipynb index 0119bd7..85aabd3 100644 --- a/examples/pvariance/pvariance.ipynb +++ b/examples/pvariance/pvariance.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -125,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -136,17 +85,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -167,9 +118,16 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -191,9 +149,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "==== Generate & Calibrate Setting ====\n", "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":1,\"lookup_range\":[-5082,2],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":2722,\"total_const_size\":309,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-2,2]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709450996625}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":1,\"lookup_range\":[-4512,4800],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9932,\"total_const_size\":2113,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-2,2]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709726157467}\n" ] } ], @@ -206,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -214,14 +171,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 1.6004958152770996 seconds\n", + "Time setup: 1.720738172531128 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 211.75\n", "==== Generating Proof ====\n", - "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', '4f03000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2d8d064eb8e2eb084c475891e8c41d7c057058c266a6bba8724079de44160a580e5cd9962476c2fcce13d9bcc82db1905f0d869e6f229d48c8bf2efb7fb0a30506e37846b512440d19c060092ab5b6149cf97bdc9e78377577e9b4ba89d7998e06eea4d5c70e86e52389dd96957430f89159424359711f8d48d65df5ee39af262a392fde5feba8190fc2cba46548bf36550f3772e7ea206ff0f93dcdbf5351a80077fffb3264742c7044175527ed75b433706ea0a7cecb1566035af4a1d63fba2a2d5ba76d3a60258143cb909c1d75475221d66eab0b5905e8483605f43e287703d5e4a0ccf60896f2453e31b5c26179d70566a07fe58480c4712457513c4dc11b19a661f93a7c49d75779b9f653de3d0ff2282981fb9e894229a1bd6ddb03c903a0431d77d161ff37087ae85bbb8263d5c9b4bf9de266bd917e4f29ed0f8ac2084baeabd1657e9e5b0294b0a67f1ec8508540bbff3c5bd0380999a5cb6be5d8300bb0f18354f9a9c073711594b5d127e0c5a8b54351f27e5e2d49b0336673de06d504f22abdd92cfef58ba3dd91d0b79b1e80e247a89405d43ff5d54fdc185d0af6f6a85606fa747a04b3fd18414fa081b19544d0938eb282ffd73e3138881929b785c6438d2c25533cfb489d3a95b6489bccc1ab72e5d764098444e33dae9223239d18666cf9589e520a01753070d99f510fd6a52d94e8cbff23bb2f3e90ee23b4c70eb9d2cc2f72c8e68224902959c48a96b55819dbc3ebe5cc57b9c1af1a12d353b3f1f8f776b060f02881bcd4c039c0b66e1ac08e3d65c8279e94f2dce0105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7090ff4a98df10b9d2cdc9066cebe5c2df6322ef595dfe3cf08892aaaf49bbd920425383c5983a87b273825e40ab4a5d53d97c1ba5757f2abc6ceeefe85492b04105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7115478743ca949680bee8c2e2a8942911176755b39f8e63efcba876659d119df23bb25125bf2b4c56985b2f3c4f54c0130a5060e650dcf6bc6ab5cd08f3ca2e62955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7632955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7630477b5e61c6ea82afa005462c55e4522109b1fa1acdc74ef8888851a0774227104721b2b9bdd105151933ecdb68594e8996f94a114e8b0c520eba581d4095f681ad2dcd68173cf2bfc419ec0839fc68918af8e519b60adb9fa8731ee02fd23711e684366ebe81b52d346f3399ccfd6b9329e9b527cccc737f460e6147e1b46f817454642a63660ca5756818e5ac6c612d05926645444ef87048ff76531d1d30918bfe9576e36a08d3815ca68639f0ff44f8da71e6198a786ab3fc6684be436e214b146635879438e867c3795c9857dc171f4adba94ebf1ac9f66a1e8789d1a7a238981380f2bc80b144e0489415feed4da7645cd26b9a7698a15c8a77d249e2318baac78733fdb4e899169d33ae17ea13c5585755be0d746ae608098793c78cc10b6be4904a8ba5c968ab62af359daac1cf60a4fbec1e8b790270af73f45288a13f8dd677b9d87e7ed26664cecf4639d2697a358af31ab0f83ab9943fa355a87302b988df1ac62717f062c733c47d89f201e5b16c891946408ae5ae6184c1cbf050dc97c7b3c0d0f9a10b898bb45bbaf6dc1dba7f18a46e57da8b3720f64ff4a1c1f7eee3e4c2f22bcf2a5a5573d6289baab832d2a6c0ad58274dfa930ba4a7507a374062b50fd7023462a952ddbf3f3a9f766b60a2549ed5c65fd71d52ffff326f1fac4ce043862411ce069dcb6f0cea67fcdf1fa50b26e5645ea127dda3a132fc4ed35bab1529788485ab5520b478317899a611f2d5c71c6f8757f99803916055a8104107fdeccd7f537ce6009cf4746b5135eca895711ec8dcd64270d803a2925a58c02a4685b0507aacb6513d9945d90fc80e4fb17416fdff4ad666cabdc174796043be354f7abd74238207e08833a0877bdc1d06ffb45b49d00cc580f2c1f7bfe68716bd9ea3eea6dc63c7cd5609eca5fb50534717eab4b906114dea46223e9e8eeefcc954fc4e16fdbbdde51929990d5b992f3b918b3514c9ed0ec360925bbff60bceeb76991b6b9096c275db22e04d6f08d27cfb72d077251b1b592141c3a1b01db104e753c9a614a6d65ed83a08e26534134cf4cfe1778e0f89de910152139c06f184fe0d5c70a41fd5e46de2ea64c901dc9ad4533f2c3c7c02d40bf00f6ce625cf57636d11a473151b22fb754125beb10aa427ea94149078dcf0cca05d74e8557d5524b7da8ae8cab3b711f069015774bf3db8aba7366fc1bf550b21281754444f80c4f41e4d65526ba8df11ecb98262eef1fd8c60129b27ce11d572b259bbee8cb211f46c90390ebb24a48f3ebbaa75206b38162096f2b586fb3c91a4bc64d3056d446a461ed89a1efa877aaef06483710621d57b93585ab308c0128802bcba81eddd887c70f2d52cf6728458cbc05e40d142074e3302fc7aea56e1bf92140e9f8b0f2486a5340d4e806b6c5e0b4044d1b088476a62af3c60feee92b0ceb5b58bf521b81a809e481adb08090652485b4ebc6215d0048c36bdfd9391996993fabfefe0f76c8aa01d9ed8e3fb78380a0a088bae78e203821a973de8e04d18a4f53f9f981d13c05d02a37179454bfb292e0e4c67a0888568c0b166ec804f2b49bbdaa98e022dd0dfd08da7746de6482a03044cdc7b20d15682f95d10b1de82dcd09862e997209d000a519cfbac2fe5a93006e2ed45cb594bcbecf93c6035aa928c1f08229ad68de4f541740982a37e03135a3e9d74286de96e7f5c3b010b67b6dfb549b68354f2787d12d99dccb609672005a132c4083ccae440457160c5bc402607991aff83ebb002fde673b2fff1a841abe80d8201fd4876f32301d2de38d00f8dd2fb8defd445baf8a54099d08d76d455182b75c1e7d3e7db4c60910d0eb6d6ffc8170d3eaee10a32d335521dbd36dea41a1cb4f82a2ac9f305f250b37eab4ef527cdaea0ab20baf53af3761c15959b8c3ed5736aafa0a2359c9de1191d0860192e401375b15f60a0a83d94e4fc71b0161b3b1541b00ef17dfad722bd718ee73c5eff8fc952cea1cab4161a02efac579c862f91d853662da634727143049dcc76f8feab91a345bfd8bfc70e546314933936371338f23d0f8e566c00397bdce32c11917b2cb9c30156417fbde9b3478906325a0fd52998fe826d37c1a36aa55322d0611e9664a2ae600fd7aca9c747dc9de4f1338c3c7b6ec46387b2ea1a7af2c3c9f4e040e2047777805a472ed38de07461eac1aed3152ba8ab01616f5e15cf53fe9794944a4842872744514ece487756cbea7deab3f485c5c3c850e44d650847b19658681d9e33f91672596850bdc096246156e6fbc46cb99983f0997143de3771cb7b72ab3f7c79eabfb782292dee99cfc9bdad651ee6108eb1c2617c52bb3e530d9ae6755290a99956df0ab9e6e1b4d702f1784fa44e6c191021e6b763c2e5b4959e6a201fad02ec63e2ec775f719d05d2f3fe7ff5eb06951151fc31dfd7279c7fbd2cd9950c3095a4395ef34c89182840d75f7ed06721491e0012c8780b1fcab2e49cb156cbf4367572c19a56f04186da6a9b290a01332bd4b000000000000000000000000000000000000000000000000000000000000000012bee07a4904728eacb406cd84a36ea2ed55e7de907b6c1b3181794e4ef180ef00000000000000000000000000000000000000000000000000000000000000002ee97ffa1c286e663956e38318d8e28b6c59d4eae78dce18983b4923f21a0790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e137acf13f53d2a72adf6f94dd7275f9494f0a92479bd0a050a12166b118e500000000000000000000000000000000000000000000000000000000000000002a424db3923945af57b843bf2d1100a8503bc329d673e2c65144b36c056cfe520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026326959c14836e34f05e7f8843399facc8857b609166729855d047bbda3ff9300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b014131a478c4cb473ec1f3177c391508022d5e16261bd100a998263a4de597215d00c4308cc98d5a15343eef20283bd205964211f82e9c6842d496dfaaaf0f0000000000000000000000000000000000000000000000000000000000000000259769c458e5d68b1150585098fd337da123a5c6b91106d5656c06a03ff0f637000000000000000000000000000000000000000000000000000000000000000002f7928f5947d74c126424ccf00435792721a5987f1b6b7ea961c91fed52ea840d7e0b2babccf2f5ad18cb8ddbd4febfe30232ab63a8124e06907ba58cdcb29c15b8d524b06c5b8b345d67295d2e68371da02c353aa89767292d3a47efe74ffe15f390b7b48c4c79c23a666558217d4ac7db327b45f3876641166659552c094c2f13300ea4f55ea5cc0bb5d36f5147c39c6cd9bc1dfc78fdff45da89a1d0076a0a84766258c84b85664f30dff2a121bdcaa64fa23b5a22ac9e22986cb0c760b215e04b24e80ea7628851d9fe4be0393e6f1c038dd8c503b6353da9587c4824e81adb33be18c5a0f4d89890f514e164eaec05fc1cadb04fc003ed616b54e801c8035d44503ebf200ab7c04576b95d7be22e72896e55f14ca1f5286ec66d5ce0d01c3c5c030f961cc708cec964c1ae2e4abd7f6dee2f3fc839fcb4233c4cec722c27ea5a53b0533fbee542ff2ee5b2ac5e2f171732aab239c7a79328ea43bc4b75008d0c601c5aec47de533f733688ae718a81b357abfb94c567c42055ef80aa4814fa0e1b471a8e5345144aa1190995876b273ac5abb347fd6f551f4c766ca567242802d12e987f11569e40683d56230a8e92a204b7ef6d6de6ca2b1f75d4b5912d281e5715966725195d42f080a181b1d844645f0a9e7f9897853e7951377db508537eccfd38777deb5448cbfc0ca84cfb0e59ecd4a7d6ab5ea13648a83bbaa11b237e4fb3f4ee89fe4a171cdde5782443c036da9e13201888d65fb101755fc723a2eba49be98fafa2e9dee7f82e645c70a32db7824a522b725b704a976792cf111ae5269b9166ad4396028ef0c4556651458fd089ed83ba2a012ef7cab79dec0b84ba6e33b210e60757e9316e75c4d5a6a62606aef927a76731b8555aef780e1ca03be406361357c6f32a0d467ffa34d9764a3eba8ff069571fd42dd69df7cf2237ad911a12c28d70fab3ed1ba0929429a4787b4f90aae3189373d13cf53980241eacf2255b2d64c14bc048a9978f5d1716c30f6906276c9162e2ebca24b7e02c105afd487e25427ba66de00a71f51597a76173f897899871425671e8048afd02473ff628762142606df4878776c3a03d96100d2d48a0a3fbaa384a33af2102171c4ed344f230082b0266e90f525dd49374151461f1d2169fff5547b3f038ac05e4ef5abc331780384e8add352c35509cbc60bd48240166bc913b22308e313d19200c67684c142c8279d9b15a52e9c0a6ee75b10a06c3d96a10e39be3710dee20b9e13f43dd0785ccc61bc4e2ff4d21f88577d651a7dcf0faba41fcc6143fc927c17ced8138799df638e51c82a6b9d9f6638d4c365925019ecf30ed45d85f99021b1547b3918ce42bc4cb8e36ed19215cb0d5e906016a7f75234136511e53d512bf701b23ef02c94a9af6a10486f0d7264d90a8716a1b479936397a8a6b57ac05e4ef5abc331780384e8add352c35509cbc60bd48240166bc913b22308e313d2812e55f87db09bcc357afade3841563960d5e344f1d7b22eb18ffd1032d54c72cd6d933943ddb691fcb78bd325f40d912aba9ba177f4a910bbb486bdffa72ef045f79ebd09a5c6f28f3192fef7bd4cb92374a7956085f87075fe6b3093572e11e15be9722501fabfa0ddd642a440f9d7e843e6406d41beb6620ebe47d0a0b7a0c501812f8cbeab1af71f944a1a0d78d324eaa13e1c80b330be792d122ed0f872e0b766142f7e05f5d6c53443b0dddb50b58a4474fb7ab37cec3bd309c929d941974cfe129d84cafbb02dc1aa8342927871985df3584ba18e54a927123c7edd002135da0c98e01a9f50f14f5ae552710ad1e9258dc1618d2de8275ab97af05ef2e0b766142f7e05f5d6c53443b0dddb50b58a4474fb7ab37cec3bd309c929d9405cf9ca03b1884f41777915e8627b1e77a724cdf84458ebd73d12b65d9f5ebb31d7bb5b49dc2a82b916c6c78c15516ee53c0efa11163b7a8fbc3a9dc29ff4c2a02e0e0a4a760183be4518a8a5ed538aa4d3f9e85b5d949c447204f41c013a0062b5b22c258af70899ecff1582724c5b834f59e2b43feb9313cff206902d8596a', 'transcript_type': 'EVM'}\n", - "Time gen prf: 2.354520082473755 seconds\n" + "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', '4f03000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x075d414f38e78cd57d2826a8e1f24bb317104fa0bd44d0c6fb86ce08863de6a905b60125015317a083ee30cca817c792e50f4c2b5e0a1c3948e09f3cf643016f2201bffd9bfb9b4c379b51e208f9e72a77994edbfbe6d7498494223157da96962031c1ac056b0d55573904e23647e2310931b65d9d1846a80f37aa3b57ed4d4b284f080c821831b4e7920b4ade76e31d0ba05de91a3acdd0e9074ea5ded689412db1fb040546c70fada26aab3ebf121c43aa2e2a1a44fb2b3a8be4b45c12fff907cc702c8ffcfded3107cfc41ae7cadce4dc2482ceb730ac3488bbd3769f57192e052165115910a636f920b0b516028958c8ad289598659c2454e049734089bc10dbd440102f894c0186bda2f38c4c89707ae193a96463f05468db8d17c45fea06d757dd8a96807cbe4fe1ca744349bf5bfcb13b7fb181561ddc558c990c1f2f0e052dcfe47e29e4ac06023d13f0d1be7ec5e0cb6a40656ca181e5c691d337fe001f72c27263f52eea6d011a8d671f67da070fc92871fdecf4ead4ba3e1edc3c1de2e5196ca600dceac3e5f6dfad64bf75c2e255a85191809eb8fdceefabdf2c1f726ee9ea7f5c02280f907f5a18060c28738e703bb3dd2ef1b3c02ff071df9002e7c49e5d19f8e8d8ec7c04790a9a46076ff408b16992237a07e1039ed3ddee1d0764efa508c93c0778fb0172dc14f33c48bc6bf24e70a1535b376ceeff5dff202251645b015d6942b0460f2e93d0bb0c34e4e945f56d736be5fdaf60ba8489201aa78f843a7cc75ea00ecf5d96de350da9b8707fc59d5761ebf6db7c9dbbd2188a15760a5068a7a5b71e725806cda8b0b8b484965bb7738522c8ed05ade14d042a5db714f5eea5ec800791165ba3d5361c0114e11fe539e7b9fc5015149969105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf71441d778e984bd8862a4b8e29eceae712f2720842bc2c5b71523a1bb2031183608a1e57e7395ce344ec6acb2b01f27d5d4d4ba85a4cc9dae61f93f7682061b30105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf72955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7632955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d76309732487fee8bbae5e55288d15ad519ad7c9511d186e6ee942bdaf47d8462e4a25b75baf3369214e67c5c5e977bbdb473461767e5c3faa9908afdd6dde1774bb0db383aa5e3bc516e0c46900d275f9112b90f7bd394c2cf8d53bdc94bcea8c390fd1447b36a2bbfccb4b87204b9539c003a882e60f05925fc4f5dafb6a94076819844076165f9336ddd2b87908c9084f8748dbfb2adb02acd1a4bffb992a15152b82d2d4e8ad35b8620f95670ea53395fec2551aca2439afadc07ed19386c3530be45547c8e5a51bb203985ef4937f9a3ba9130b0e029a425ca9745061957dc310b80c7046262950a00797b71505211912a4f0ece3107361a5d94e76bd990493217200f9c7ba1cf79e235cd26d5dabbe68a8aa3bdea8ed1d0397045e12afb97413d6a1a9da91c5aba68204a0bd7cc365bbced6ff23c1bd286090d68d730278fd0bcd267c7caffe66f28b4da23a4cac48e5e465401c29cef0d3c8916009c3a95f013df4b919d4283a35614296a4f996d016839d1accc3b0b20121223df37d35fc26ac3d6fe5f5f411266a43937e781c291e36947cbbb40239479dd8f413d4cc40082334930c3c6ce764450b7da8a531dc3e0c7acf827b50f6e72db59713de27c4121f01653a3ced3e8e687a92e6811222451c7c863c52b540280b38d67e22d6aa21f12b4b55ffa75c6aa6b40fa0137abc4f44333b283d37dcf94171d3880d80b42752a2d3b97a667f271d1cc901c6aaf10a50d873c2c9be3a5875e550dec3cc121a26a525cbb276f38452e38f34cd40dddc89822c6b86b94c8f07c8516f0b587e16049c9bcb6638c9d7e75ae6161117f4559fc08674ff0429537591468b5c6bf3224b44f74ffd4f5f6aad4c3e2f11a06a17a8531a784d0df6e826064432e82d582aed4cfd60d2474c65047f37106d7baa598a5cb990eb01fa13b264785a82ba830f8d92445e6752e8e8b16f6969b2a4bb69f7cfae3f91f183dcf8d85869cf82ba186b9e2f21a0c2b924f71220e26e84202c660cc43221d99ae6135c22871613140d747149520ee6e705574ab791a7f6ecc3c57832861018eb7c598f7e58d54bf2107e702102850bdb44eb73bde2b7c318fa416d931bb3095d98b4216801cc07ca0f2dc41c90ff974bddec4bd5568ac5b0faacb416c675aca92b86bbc6d6ef2c8611ed9a7ddfedeea5d6957c74e534d8b3e74e63a905d7fabc624f8f76010f968a071fff8f105899a95ce051f78db3b10bc40306579515f68b70f0d8543a61c4110e73c7fb8e74ab8dd85f12c8368c6a69bc4f8a9c7e6cf1345e25e72ca9d33d470c4faad01862be42b430ddddb46260a997c39c21599af2503c0de675c9c23ca31306cc8f1fa5baff1d726e4e8f053d1e16f2c1478f015432538abef277d376de00c5831db7474d09e9ec809ccc876d1573807e8da6a156bb73e67e752cd5da9502efef2880742e1b7e0ba8dff142c275f2acc99fff38aa716524116cb3d5d79a28fa2aee21499f310d59167ce18049c9cd26efef4ca200a133a335da6876254f15fc09acbd47ab641408c42c31eef8bf4ee71780fb769fc243ce92e6495ed33d27679506a9eb366cf0b02760662b715b371aa0cd51da6ff2ea21328cf22a471b0cb83be13f34394919e69491544c158010fba23f49fe7ee4141cb080b493180a10f42bf5300f90c61e0ffb45565c938a4961e342b3f2397971bcbc04c97438cf077c6f9c3b0ea17a0a6f442c5549ab5140ead8ad5efb8ac8118ded4c968e3396128d074f6568ea3b6c05d90503056a4efbc372ebfc5f82a168206e7c97bc6d671cd26c6eba4b8c2c3da43e3afe35305a5d6c03f433ae412133cf8b178738d3741506b00e351be24c25462f2e826c91a5c04d62f451e18acf54907c99e87b889b02ed03226c394a666b3c1c7d23d5ebd9287552f791cc3f427d8aa5a14648ca2f03967fdda01d383a4c930496a4eeed48130428e6910e7564f437dc6fcfb13c9e18d349b0a98e8ef43abb2455e8f7f892796c7ab7561ebca931ea986d0c9a73ee17fed20e47b635603e2d98dbc8091d70b3e77fc66adef28a292b509fe3afc3b404ae578317bea404db7dca2844967afe8116f7e0ec8adac1eb031e790be02b712f1f4a6c5d96c28f4fdb5c6e47a243877895c11437255a93630df5f13a25a9240890eb8438e4ddca740c7b413c553a208dc052aa312034b260ef0612a3d6f59811b768220eacbede3cb8cd78f17c123485473b05811e6992a3923e14d8a4de500cde62e9e158e42b3c38711dc01de791f31377a24632e320eb516044d39073c721c4776fc2f15466e589a01ad603774a2e3d5f4ed64a977645c962e68900149d0306b0b68afd3cc9c33baf2cfdb9c9103dfd555a339196c8ba690b24b6861bfd2cc0fa3094a21c4d9670823489ea5c968d49d72ee14b5957a87becd82aa680000de82a161d3f85dd7c8dabb0418cc68fe987a8d6d7619caa8c10a5c108d6c41c2bc97c344aaa37467e02fda8fed2174a6e612b110cd1f4dc917f285dd50461a20950d23b9e25c5971785532916e5e46c70cf0cfbea932f8dca2fe9b8ff41fca8040ac4ba260004148d1d0279608561f0e89b6d22f1fc210050e3b4cd254eaea0000000000000000000000000000000000000000000000000000000000000000014d9a226a978f5e104d95d6a818b190a62ec849dc87b49ec95cc070dbbfa174b0ac0d4377376e3ad7f4cf9102882f7a619cd028506b01a54cb97dca9d43b848e000000000000000000000000000000000000000000000000000000000000000003c99c7393b44eabed6f21bcba698aa6e7e4fc24ed67bcf382e7b671000a9ea71fa61a77553d0633fb1a979d3d3d3d547a5fe0f25aeaa523fed6ed5eaea3b23f05b2cc665e810cd0ede772fb29aa4068e4aad9b006d7ea1b4799b131efc68ab0000000000000000000000000000000000000000000000000000000000000000022dcab52980461ac40264530ba6f943301ccb702d158b78b1ec5a8b6f48d6db40ac0d4377376e3ad7f4cf9102882f7a619cd028506b01a54cb97dca9d43b848e00000000000000000000000000000000000000000000000000000000000000001cf5a205745f70e53aef80be8a558b61a14285517c4abdfdf50151234dee98120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110e1469550f787e0925c55403724e7c65f6e499fc5965ad9de3161beabd5e290e93f308f0e39b65e78cee1c61aad8508804c5b9081bf42b6a212562a490e15715dcee7428a21b29a01275b650ec1ae907116e1c8943cf6282c746dc86437d9400000000000000000000000000000000000000000000000000000000000000001d0c6a2986d92f7bdc34c7b5e6d4ea7c765e259d72d639217802d33da0a6f6780000000000000000000000000000000000000000000000000000000000000000163eee6648c891c50ff17c11cff03b7b4ef169796aa7052e66e6c1dd64b3ddcc1b53359eab960d626d3b03cd115303a4117f6aec186385d36bcc4fb0e933a0ad22fb183db33061df350ba6f7b1f7017631d5fb6f4cb861450f39f2409da0a0401ae3d790606abb759cfe8d3519878bc60a6e273da728a8942f0e43113e66125e1d3ece8afa23cc4b8fccf33bd3e2f42cd820b4be477113fa378280d8520fba721bb66af325f4e0b6451df7f727f37b13ca5ff5164fa9540a0ad9fd500376d0bd2c3524cd947d653a63340193af24a326cf7e51190ff8ca98e3cb9212e81814531161e5b1817c7308ebc48bec3bbfa8e9e6b05403e489bcd238063ed502a928f90e7c6b955dd5be0df3dfc1c8e822ee9217fd7791d294e6a6583b6092a14338ad15df7350e4e75fc699834461b11209a0d20b69641da0a1fc9e7b6b5e2042700d1ba96efa930cbf7cce798f37c2530cd37f582617da37be032b08588c4d774e532fe89e8d94567c766e8c1828b18870bfa08878878203a1ad42b53f5587da216d23021fed618f64a8f1bd156c8acc2ee6d24886257b24fde2a40d4921ece4d8d00ddcdd9ddc71f39087c2334bc513b6e318d7efbf124fe6a7712217b4bbce2c6e10fdca773b9ef111b960b1fe03aa454ea77896584effe6183a5bc970d635a07d06e9534dd68420e457793ae4f31d94dabfa82a3652904fa3da6248a53e9968a70787f0cbccf1710d300682258b78297e6603b3c2c78cf8c4dbb6ab56594c930d214a1fe1153d0e9d2a31c16537b34a50e3f762944fe796f8f87999b8f9be070312c8d5722936de388c2a592b21e61afce6487859eadfdd1deb7da1371e5974be22fb7fe0ba7637e15d31f8000ff4ac0d9e26c831206cbe82756ad02eb410479f01d278102e41a28de1d925e58cdbd346136ba9cd354eed0e5cc09cf85b49a1e70fca6917ae4cae792aa3e3a0c00a12d10ca5bef6082122697bdc0c120291fbcd1bf46f6082e8f542601917966c82bd75a5217b2e0502e96b47b0763e0a2bc2e908aa3fbf025fb0cf7efc946886f66730d384b2ba0a11670a41aaf1637acd23642873eb0185613d33bcb40a5aef7f7aa52c973032e6c39932f12a40f0cfb89cf8121c806d068e777e9676bcbbcc4a79dd70b205b7edfa926a9a9e5bf4b00e73031bfc629897d710183789e5427c24e209a975c1789cd622e5fcbf78829cd935d125e6abba9235367b294322855d5f151b2b4ba5f5ed37c75e6ed0aaa94e63f0c52786efdf1a0a2a4a43479aba8ab97ad62cf4dbe018e745ccaa286c0470865b2019d82e42daf75c6eab2e0752aa74a1b8101d74ef7d51d15414ba606f5ae6ac872542cbd3b4c6fb8e757d0d422c07b042de5a2e370561a2d868582f62e21b7ba30c53cc630137a01d4869aaa10c89dfd56e2093ff9b1d74b569e58ca22c2c8c442a1eb97078d5a6621c193198f5c25c98054f4223ce4c712c1059d4f278bee2bb1f1ed35a684d60dbbcc6c8b1484707d9908778e1a9edf3fd9f333d49ef18d1062786efdf1a0a2a4a43479aba8ab97ad62cf4dbe018e745ccaa286c0470865b202634adcd425164c7a60ac0d95076d75d1a0f2c8e16073e2f15567d468e49c0400d6111ef3b98f94d59babd3c6017df37f5ffcadd6d859745a6b26fa254c83360130b519dee6735bd9c5ea4624b87308247c79c3ff2318278f0552aa47d4744890a9bf7f2c7dbe5d2b969fda5b6df4641cbb49b242edaa2f3965341b6ee1ed52f2e32e561d0d02c8070755c13add9deac3b983d96f8b56fb36581753fc34526c7130b519dee6735bd9c5ea4624b87308247c79c3ff2318278f0552aa47d47448908e2ad2776dea4549b21e5bfad638888ea49424130d89a8066a3ba2d55dd21bb0fedaac4f189bac767d15e7edbde502652474c24f68682f73fdc420ffa000d970580be0e689ac3c0b9709a0df37184d81df18e7aa9798c1d36a2341e3167fd0320e7203d936cb9baa954c7412a5f8621516c60596f2f4785741b3807528b11ac', 'transcript_type': 'EVM'}\n", + "Time gen prf: 2.419577121734619 seconds\n" ] } ], @@ -237,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { diff --git a/examples/regression/data.json b/examples/regression/data.json index d8672f8..e31e58e 100644 --- a/examples/regression/data.json +++ b/examples/regression/data.json @@ -1,6 +1,6 @@ { "x1": [ - 7.1, 3.2, 8.6, 3.5, 0.1, 9.7, 2.3, 5.7, 2.8, 10.0, 6.0, 6.0, 9.1, 1.7, 9.2, + 10.0, 7.1, 3.2, 8.6, 3.5, 0.1, 9.7, 2.3, 5.7, 2.8, 6.0, 6.0, 9.1, 1.7, 9.2, 0.2, 7.8, 3.7, 7.0, 2.5, 2.8, 5.9, 7.3, 2.9, 2.9, 3.5, 1.0, 9.7, 4.8, 0.9, 7.1, 3.6, 8.2, 3.0, 7.6, 4.2, 5.2, 8.1, 6.3, 9.3, 8.8, 8.2, 6.7, 4.9, 5.4, 9.8, 5.9, 7.1, 3.9, 9.3 @@ -12,7 +12,7 @@ 1.5, 2.1, 0.4, 4.3, 0.2 ], "y": [ - 18.5, 5.5, 18.2, 9.0, 4.0, 19.5, 11.7, 17.9, 15.3, 20.8, 12.5, 21.5, 32.5, + 20.8, 18.5, 5.5, 18.2, 9.0, 4.0, 19.5, 11.7, 17.9, 15.3, 12.5, 21.5, 32.5, 18.6, 23.9, 7.0, 16.9, 22.9, 31.0, 15.0, 8.5, 8.7, 28.9, 19.7, 12.5, 17.4, 7.2, 25.5, 21.4, 15.7, 15.5, 8.2, 28.2, 19.5, 25.5, 12.5, 20.3, 21.7, 22.1, 19.6, 32.2, 22.4, 20.6, 19.7, 20.8, 21.1, 21.8, 17.7, 21.1, 19.4 diff --git a/examples/regression/regression.ipynb b/examples/regression/regression.ipynb index 740f06e..88ca29f 100644 --- a/examples/regression/regression.ipynb +++ b/examples/regression/regression.ipynb @@ -1,56 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -125,20 +74,44 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "scales = [5]\n", + "scales = [4]\n", + "# to conform to traditional regression, here only one column of x\n", "selected_columns = ['x1', 'y']\n", "commitment_maps = get_data_commitment_maps(data_path, scales)" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result: tensor([[[-0.0368],\n", + " [14.5325]]])\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:399: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " y = torch.where(y==MagicNumber, torch.tensor(0.0), y)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:401: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " x_one = torch.where((x_one[:,:,0] ==MagicNumber).unsqueeze(-1), torch.tensor([0.0]*x_one.size()[2]), x_one)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], "source": [ "# Verifier/ data consumer side: send desired calculation\n", "from zkstats.computation import computation_to_model, State\n", @@ -148,7 +121,7 @@ " x, y = data[0], data[1]\n", " return s.linear_regression(x, y)\n", "\n", - "error = 0.02\n", + "error = 0.05\n", "_, verifier_model = computation_to_model(computation, error)\n", "\n", "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path, verifier_model, verifier_model_path)" @@ -156,28 +129,43 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Using 6 columns for non-linearity table.\n", - "Using 6 columns for non-linearity table.\n", - "Using 6 columns for non-linearity table.\n", - "Using 12 columns for non-linearity table.\n", - "Using 12 columns for non-linearity table.\n", - "Using 12 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n", + "Using 2 columns for non-linearity table.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result: tensor([[[1.5701],\n", + " [9.5437]]])\n", + "==== Generate & Calibrate Setting ====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", "\n", - " <------------- Numerical Fidelity Report (input_scale: 5, param_scale: 5, scale_input_multiplier: 1) ------------->\n", + " <------------- Numerical Fidelity Report (input_scale: 4, param_scale: 4, scale_input_multiplier: 1) ------------->\n", "\n", - "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", - "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", - "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", - "| 0.006681005 | 0.0076099634 | 0.012433052 | 0 | 0.006681005 | 0.0076099634 | 0.012433052 | 0 | 0.00007083078 | 0.002049841 | 0.002049841 |\n", - "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "+---------------+--------------+--------------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+---------------+--------------+--------------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.0037356615 | 0.0076099634 | 0.0076099634 | -0.018816948 | 0.00880897 | 0.0076099634 | 0.018816948 | 0 | 0.00013732968 | 0.0009583685 | 0.002272812 |\n", + "+---------------+--------------+--------------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", "\n", "\n" ] @@ -186,9 +174,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [5]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":1,\"lookup_range\":[-11984,368458],\"logrows\":19,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":468,\"total_const_size\":17,\"model_instance_shapes\":[[1],[1,2,1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-16,16]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709452000287}\n" + "scale: [4]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":4,\"param_scale\":4,\"scale_rebase_multiplier\":1,\"lookup_range\":[-13092,184230],\"logrows\":18,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":1518,\"total_const_size\":219,\"model_instance_shapes\":[[1],[1,2,1]],\"model_output_scales\":[0,4],\"model_input_scales\":[4,4],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-8,8]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709689578404}\n" ] } ], @@ -201,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -209,15 +196,15 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 57.17967200279236 seconds\n", + "Time setup: 27.76781916618347 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 1.5625\n", - "witness result 2 : 9.53125\n", + "witness result 2 : 9.5625\n", "==== Generating Proof ====\n", - "proof: {'instances': [['cdb07195b0e3b568c9d622dde480fb97d8a12b0e4ceb8fbbf155e0cb4c58720a', '81c924e0484c8b03dc1fb951bf90b87c4947f9f6ef4918bcacc3fc687376cf06', '0100000000000000000000000000000000000000000000000000000000000000', '3200000000000000000000000000000000000000000000000000000000000000', '3101000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2468f03b2151371062ce905abda32cd48cfbb06b24f3e73261b211e40d6322d6224f8365fb1c70ec51e2ef8f8fa97e61ac4b3b8a53d1e5f3b07b7fb3b8f0c5b62da4c48346d2b4ab5f67a872e0306dd022995860253e91c913e693f30cf77ff314bb7d619bf8159212afa5a27cdc369369b6fedf854ea5e95f3a4921e14707952f026bfd134488ec24344e5c48b3f93f6c24c2982ef1500724dbf10f86de29b905466ae3c9512075548484ecbc45ce38cc909fdb3263cf5e912a60f55424cb5e28cf2cf2a8375cb803bda7e0634608c7ccc15127e4a05d31af9eeaf542512642175e1a4d86d86242d3f296592ff5e7886dab9eb31041b8bc6186f7049be227e32a50520e3876a4aaf8a9a3ae346f13b9d13d3dee939869dc150562b12fb2af1c04aee664b23710edb39764d9437d24e974b2fa3eb759d4308b6247adcc2b87eb1c780758408f845646abb5a93c80824e9c6bfe2b13319edd89490ccd3bc58d1e05bd243db99d10ecfa783a7d1c872c51d26d7610c06a7b57e4b8b32e43776e452e711716689f2cbd4727f50652fa652fb9f1cdd430c18dbd926256d4bc0eee191e18012e118d1203796c6aebce437a5fb58df5560b9f786abc887b0d4ccbbb9e01830238d0dbe862e2c51c4c7ee786c93dfda011d703bbfd11f1e56b28869b3d0aa530b03946bd9eec4b5fcee4742cf757eda2a2c42d56eb22420a8ae8f147480a851e0f85b5e2dbe2a65765a33dd5a93e671f8dfa31d1c396bd884e19457dc703e6cab5996843a5b6aee069b7e063cd3d070dc1c27306149c0572748a90407f062a40852126acd8f81da3610150c01519e0c9a045f695cd6ddcbe683342a8df0df45d855befa336e9d5df3dd7281f6568128fd426ac6c0eea033d1383478cbe1f1463533e3b7ce56955bd2bf687c2ceee6536219d973c4c00d860cdb89ee1a30539ab32a2f81a9c2e447075e5b2c00383614ede7af11056b1ba5c8a835b24fd303587e786b90959ba607cc5542a5027c883d55f21d1b531cf0a87250973c74502ae9b423458fab3eb43a8ac8d1b6cc7ffbb0c7da34b5ab26816d7baca94d65a1371b90c8ef0d0532ff8b80725cbd0409052e43449cd46a7a097dedeb73c8a9c2b1f540685df0415a103030aaff37ea0c531ec4ae969fcf724f75e47f40e54f616b9d305e8c1a2f6ff2af81a89783ea7f3d0c9ce7119b2340f06f7bda9f366c802a9ac5b2ec9c859d61681dafeec1d463c4adc39b57dc2646c3b260a936100f91a28679ef5de8e7f16e75ce89f7498202929f20b1d16db85a1d0c262204e91d103ab62a1f098f33341a21fa928165f1aa28a38c0aad1c42941b3b9d969e1f9840a241d0eb82158f93b0749f10642a9d5711475dc392d6c8aa5b16ee24b1669e524805f3bbe10b234e83d96d77ae7867d18dcc50f6de78b27f01da42f6c494f36132ae7e8550e698bef995fe505d9ab4183f262099d86bb7477dd8a76d188eeaa197d062990ccfb8077c32d58eca0d5b974cfb267e931ed68dad155cd8ef9a5890f64dd0d7491d841ce98c80512f942dbdc548f5e199aa5c582cc95e2572f3bd820d1c9cb66714e920dd7ec6be2e96d102dd4ba073f3020ec5067c9f1db774d7222be799149775e77ce1dc5dc05bbbe079212712ead53c3fbb2db71431d9e1dd00f944678753a1068586eb9ec0c574b2619fb144bab19b501b7c5129263d5c46026e51486b16ac85022f16f71766bd68e3d00a21cdf057028f637e443d08eb914031e844bea3f131c56f4586e13292aef4f8a79e6bed279eac479174a813f1d79041c50ba09036d92c195e672d48c61b651f6cbeef3c08b87a186383b5845cdbd1977d3adaf689194de5439d74a72ec817e14bbb0dc9c9fc351d5968c0b7b3fb62c4714d9781139d0d0caf60474ec6f95c776da668db8c7c6b1055ee174d12b342a1cc9fe179e3a6a791e988488ab3951b0078165f38ca521a9e5c43deb418cda2081775c882bf5a7bd00efba8f4d0bba545c12337334a333db2bad6d3f212d900e78f2703ab66183061ddf29d59d6489cbc6120f849107e50a814b1e6475588010bfbda5c17197e7a00ae31d6c137cb8303ceaa42ce944de51897884a6ee393d011c0d10264a26649303a096b12d356d35709601b7db6c0928004851adff481119b55c870080042bf482d2cde98449970a8743f4d5f158a169890eff7b27fab00db673d370e6fe2dcdd3fc724b0b0d80429aed7789a1056667d3dae9b4eab97c23105138886feeba3431c5a41ec11ab25c4bc2e0457336e284ed313e681f7c4a060e824d64c462a2c2e4e2b6fe344abb8e1ceee0a2e780f4aef42d87896f76de1dd71c5865a76639fcf5012c2672ad3b9d76975f7fd00680017d84c94179be290a819ee8ecf1060ec89343896780e44de095981448de21c0e3936f4e8394160e071352ee990f37bbb3e10a9fca1e36722a1efb41d0503d7ba98ef75fa06d81e009d69cc2779e93e8b6ad40c556304093bbfbe6a70b69d239ff98dd84642d08382e540f774e08c70fe61e96a3abaa9ad739dc3b2d7b91293cf7e07b0ac8178805010258781d6995d004a80db1fa79fd5ad10c9b5b387ecc72ff63920abe540b1703662e7a6e20795b8c1e04822cafa5eccbce83e09512bc8ed4a0ba9042d49f9e005f37fd7ff0f8ec5ad30488005b60672cf97454bc9a56136413f4900c18522c23ba797096d68c6a27bafe139bc6ae3ee3e9d69d2a6481a10c2814ce591b474b11d4165797c25e8887e00af4045e061791a62f93c6dcd088496468c556a886a7148e3c60e23a70a97d4a2dc85e1887f8066baf0a689ed33376307910ef0cfa9b2a395bac125faecf6ab3182ea1e69da9cc47e640b158086701048084476a93940321df51d28a3ba47aaff032654b3b510fcdc0ada3c42ac497788893e24943970e3a21569170022734abcc331d326542c748afc0a9bf302538a7cb9de458650607b9adef40675db7b88f485e3c008c697c33854997c08ff413028c11eaa98fa228abd40ea4828e84de552ecdd7744d6d54922f26259127d5a72fc6bc892302d71eaf5455a3b31b2e43815b84ee1175e59279795e93bde3777ba68615b34b3fb301416ea4699bd87dcac00723bc2af020e6fa2d8a7c96ca228daee466d72825b4219a4363e229a468a1eced40e307580decdd890cd22a7c9871874f29ea4f71cf2a6e06f471ece9dfd8d22ad430e2d1ce3a5dd21ef3db0b82002d5ed9a29dcd2318cb7a56e557939e5faf593640b3f29e023a204b4091f9b4bd5f79c1f932f6122e92de481a64a6e620a9c13595ad50f69fd9bd24cdac1c260e446073cd24debc18dc4b230f213aa4a1f3fdead25bdcacb599343506093f8c8a07a2acc69242610dd46fbfa862031ea91307c1d55dddba9406900d975d2cd8f28056d2863d945d0ad05dc2a93e776576fe7668944ee5c790609502fef8bb0a88a34cb4772012d61decfa0466bb9f2509a7e3dc2ce8dbbdac87cc4bf9b16a5bb7482a5bb437ba9e081e9b071cd40386a87280a0d6261df088198c338fee8e6401be98c2d3502c4806c6d6510b89504ba7be9f29b9bb045c2feb85866c4fa05bf8b1462fe6d68ea8236277d32a9c15e6f72dc24e8ce56aa85d4d56ef6acd85634445f98b8d9e45831bcc2bbcacd918ee1fa5ec2af660abd2a9b90201f14b630f9e6ecc45f0192d9d13dbb24ce489e004c0474b4fa7406e9277dd9dff08112494de9dbf1199bd8b321dfa15eb50760fbc611f191ea1d60dc324503a9aa98cf5bf3a33c0a5ed3f55b92fa5197a495971945023a2b185746424efb20cd541a12610eb788378e91764302e907af65c5ba74beda2ae5006bed9ff8067cd0fff4256731ceef541b9d5a0490000000000000000000000000000000000000000000000000000000000000000159e6387b0d3dcd157615d16a098886f41742dfb38b3b8e618f8d6cd9289c0b200000000000000000000000000000000000000000000000000000000000000001a57a5e010bfa7d5dda7f5466cb3f379b45b4a55b7449b3867584bdc53ed532600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002907572cf757223345a69c98833cf74f23c32353ea7adf2a9c7de5406b917fae00000000000000000000000000000000000000000000000000000000000000002242e94d43c7670cf209bddd69db8a553ffb4ac88e1752fde53c77631091728c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c533c2209fb08032ebce0dda12e67fc810705753d7a252e6d86c85ba8e4885d06ecb0bf5abdb97c2f6aeafc75309bf4171e6660fceefb1b599025146b9b883a185e4687dd624e48483f9235f34b32c8a2024a71572a85341b56b792b4a5f58d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e1e01882446c6a391459b7a6fcab96523b5eb265f4b58ddfdff066af29ac9de00000000000000000000000000000000000000000000000000000000000000000085f5a7f48ba87a55231fd107616a42c75b8d2f862ff5515154dfafd257103218b85b0100e58e90359c6cc47b19d89b070e6f92832ce7358beadf9d1543b6801c8ed6d2e22dcb52fdaba227675af14267630b83d81819aa0f70089744e219e919f99f2b5db18f237cfc96e6c1ef7f927aac9015d88af18738d4b14fbe35408c303ac2e26430eeb7846aca7a062413fec202e8391d7b8ce16b67973045eb6776024946cccca2fbb7a81324e4a23a79bb609400fa776baabc8578d1fc504d2ceb1319429fba40ca2a638a06c1781c64f80e665be65f27720753ee0b5584b639c126e3ec9c6a724eba946af706bae1926a883e50672585cbd40a155116bbde4d662478d4fb2857831d0dc215c03c9cd93a57f0baf518e9994b8eaeecec70a1efa6029b62cfef52b92fcd8b59d57e9f07bd4518ecd56019bcbbc3e0e38bd8abd9d41321a311cf4a635411d65a3060420857261c6cbf8f84a98aaf80656d93e91bc3293934feab550406a9546474079fb1007f93c29e2a86bbf3ff8806b558d6c43e13f0899ac6ef643f86e8e4b30d6a404db04ff94c1a095bee282db597a912b3bb0bef93c4f69c8d204e4576d43173b9fb757c2b71f5f73d875fe498429548a6d60e067594e88d097606736bfbfff64ff558c63cb003b4824c44b46469aa852b7d2fe5adbac07a40261f918d6e3f0caceca0ef8555fbaf61a0ae458c72fc0236ba20bb8d6d96d0fe166634f3f34d10839fa1b1b0735a891fd1e6e831bbdb71a9bc05d92fded1000fccd7fc4d1567dfe07f85b22b718bfda71df52c7f797c076a5f15ce31f846e9073dd34f070f8081938c6fa3b0c17f84ac02eb8b0b65bad960b42d7a6417e61950d4efbb2aa4acee7413e1652d044a210337a24a8bdfee99d98a3046906b3f08eda3965ccf74bfeac88b7660935592ac287a43d84192116fd3902e125e73933714c24fb7cb4f3b6b96b6f06b81c8ce3757d867f89a87e69cefcf2b02e226e69a632aaa425bc6ce4c5a7db549c55e47913299abbd810128a1415d0727f37d9c97ac85a5e963d948aff0f4aeedddb5aab07b3876be9b04412ce409154364d97ec152336a137c21e34f03691f819f577083925c98a3814718cca33e1bc178e2fe46f2fbffc0de69a84fc36985482333e96a5233e61fa935c112d1c814c7dbc95cca9457e57d30ef9b255c836f5e61e28394ea162ab14c73f89589361b62399e831c8562cf4c6a532f3d3835c58ebc162595f08fcabd12e14b0fabc90cca88aee1b607f753a79b7c95c5dd5cca4a9a6154a6d322731436e8431f998805adb54ee0d961218c83c75c30b7a1e360f60ff813d88fc4b8dcd57de139583e0da243e28b475aaf6257a7391abdda130972f196e56778950c7c032041c2b1062b1066fbedbbe003d9eb4edb48159bdfca0604c01150eecd4863ece5f443616316bbf6975f786d7f1a57fc024f85c7dcfdb1761c0a9a16416b7f4c8e7f06976307958e817fd94201c982610aa6b5d669656b4ba30ed2a3c135344d3874e9893e1ff5cbe09c256288f8386b78a0bdbf2365eef747194b1167e65ac7e198c5b54114cf86e5288ccdc2d7f5be38351a65bd1a02961d09c7087486c1513cd1a9dd8108873a3addc4adc3d60f40eaa4149139fac12ea6bc2d5c34eb41d866c50a55241911b8cfd242299d13d5684aae0310a948ad907b778ba2178ec14261bc6f391a2a92bc3bdb0095197d08fe49ed0cb9b432ba72df74a507b2179c577e70f1d60427710bd9bb4156dac2bdeacc0e851f5ba80d29cb2f4d798b226cf8b929d4c023049df4459f5ad3298ffed17124d1cc598cadbfafe22bbbcbdd58b27a2780fdfc23fe5b70fc05a67d14dc804764db47d4964508c5eb6bee592064e1e0a0d25b6804cd5a741fd5259772bbf0a9b0f2af24866160d5dcf9c648e7ebc9148a2dfee82b06556b2a6642409c4f1d1cee07d0fc6c268a5c7c548fdaa79ba8664e60d9e51d2d3a28d2706f62587d358a1ddd9c20ee9a39e560d33876be3c406a1404c3702fc11b3f20a2508649edecf7818a4c028dcc7a45d68f61a715ecd81e15c3f2692454675c1c37342d421406766633a76350535f916216df0b7c1be48d36ecb05825967112493e9870b281285b0093c9027bcc97ebe100303d3301771e846bd20c', 'transcript_type': 'EVM'}\n", - "Time gen prf: 60.853655099868774 seconds\n" + "proof: {'instances': [['78f113a919d1324cbee267b4320db42ee0170745a57013fa302f8139d7c36f18', '8dff683cfffbd97a4d94de7d897e03bb3f2fa18084beff4bbfbd152c2e2bcd16', '0100000000000000000000000000000000000000000000000000000000000000', '1900000000000000000000000000000000000000000000000000000000000000', '9900000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x26531800aa72b5c475b89752ec218e3c3540a72c934d711e5fddc08c39ec9e7500920f846837e5d6ccfd4ce080271d118b5baef638009e8338cf4fafaffc30cb1c4df8aface62a075d51de1f421e963266ac630ac426f07714c727f10dad324d2e7b62326a1db2fc495c2860da2c42556e66ad7b819d67fbadb1e1af00584250212dab3be30c803dcd884f0ea319bdf08613464d70733d76b61b4d4ba7adb014106fe882cbb3b12f28c090a98fee91a3563c602f64cdfecc6191561cb696439b1d8d99223d2fcaeae42fb701bc5734a30e84fb868ee3f1f0f8ebcb3d6568e3ca1b267fbb25db66d068420d4a65a86a68c3a290182458d601af4fa15f54b2a9d12edbfd2460d90f49e7486b87a9ddbab286d483f601b775428129bf442d148cf81326f3aae5fb64ca0e1db661bc722f5ba25e26e06c4f050bb95dc0a00c82ddba01bdd94c25287a0691eb236c3c1858afc23e50252d6a8d1104d6a0c5ad41b16126ed1b351657e2d88959feb48599b7eb74066a41801f7d21a9621cb84db816d7038a1dc636b7c3046eb8affe8a551c5c05c6c6d617d5f3c4306556ac39736689059e8aa5bded15b865a6c1cfbe89a6c20a1f9ef3221d4fc942ecaa81fec8d55608dc103a00066a6e057bd6d26a88fda73e8da7bd821ca740519f8d1f40c8cea210e92a62f3a44f390ea31f08f7f9b35b04cd278558bf4662c30a64ea29e23b931684f0f8c3b329dd21ec8c170482a7eab711002d2861adf1f80f491c33f214d720740ce7059a857ee755ca7c630243fcfb347d7bb664574c042701968711bf360cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee91133b92291ecf0b79b3284cf3df064caa6be6ec09c6b269cffd9b75093d752abd142e5e379b3834ca228e7d61b1e875a0f20b30754cfb4ce45bfdb6fa6e49d346277f60d3d7b2a75b9a15b84efa4d3103de906d72b73d5ca7dbc4434251996e86087ad2f9d8f59a970a40e29eb70841938893453183f2db6499dd5ecccab1836c22f1e71018e17e425ff14daf90a48c2b999fb7c40d759653bb808d8a4f2a784e2de70cafcb00b7202f4d307d5c92c42529a97158aaff94bb58e9f890f70c924521b803cd20f7d27ca59b0a41531b3bfc2369958c5246a18c7e91e13fa5041f1d085e9d9b5b3b90c5b46ac14405c80080fbf6a5314088ed12622d8af6355c245e030bc301b954d6bbc4de3c6673ce2998b002a143b922724546f09fe1eb8b340225d038572175c8dacfd092f87f199c0eaada465aeafbe54ebaa244673f41f8f61805e1d725e7b4eb0d96214b9b3580fa865eb929f3f1829f6ec706627ab0b04e2bd9fe8e7e55df111b5666b0927a71f872ab1e718e4beafa8ced3815346ba00b2e5748a39d7709dae242c9d698e223e92c7820344fc4b245baf0fcdf57f229b21d78c1e2d7a8ea6eaa1e92770d5e2b5c2c0840eacb23588727ab74bc7a2b31ce2c73fa0abf732f6757046849fc243d9d4e14347873d6feed8695d15860e0bff0067152a47190c7cd3edc35a92db59bb3f4f4cab13704fd36b9d1002611a35d3a1c751ac997d3ad204cb44a8fd20c1800cd7ddee3c70230141edf5dcb7f25b77e115c6dbd2d059a949b977322f7db49cf06620902282a866b27812531cf1c71cc02bbb72b7ccb130a50d1dc3bd5c950a46533474ac1b01a0b06cde1434e85ce421632fd4be65ddaa0f3d7ed1dca00f0a792c57c2ff9a0b91cf43e9735f2bde89c1f67f354232a26eb9285c816e1748724663ba9ac1e18cc0ca467f11b2ecb099c10b703508b2238aad2cf0bdc466023da9f317de00e480da9c1a46dbe2d0bfd4328d20dc4f9778601b57eaaefb125f99417d12076d0eb8b37c37921997257756023c516cb4e23bf82d8ba838870b57b3e05f3013a0dabfd813b40e57d59f124bf20eca4c371893ce169f23051ca4e4e39d3488594b743ad324f204434ba5a7b202b550ffbbc4cfec5107434ff8120a62bbaa48b37fe8caac62a661f9d9fdac7152bcb90559d2106d4adce95bff11dada029879856f0ebd38000b5272032890d9719380e2a932f88d1c18a674d31d71a13526f79d8298d526041e6291dc41181520a7bca585416d210ec090e88cd80d6e1e7351fb8394afe834b2e3809e75ed3b910f0e986546c6dfd88990a61a790e3909dab751b4000e2219ae562f473b7025d0b6895f9025f76a43b2e2a1fa90beed4b409473775bc57b661660fe7c15ef9b21d9988d16a6ae0ec7b396e074a2cc547b98e128eb285af5ff2a540eb69d99bb0052318bd02eb4f00797f79929d005dcfcf2dd3d61b65374a07370c736e26742629d561e071d686b3af1e63db41941d65757f300a999485204108ec6f2c062f4007fb3722f4a3d8ef6bf0055ba23a19528067f0cbe1817a742e70488c2b1238cf0601243f0503f4ed25ab93797c0fab7e754a6d19ac02a59fa1710343bcc7c6842347ee29a8692751808999edf8e33126b9460bc9decf693818676a9de14b8e822458ed3546009b6c9e0176c4e57abf9098f5ec3e874df3091494dace72563c6406a6381c5d634d70ee6a77b4e169b7083f24c5e03287a17863d65c48d64e71a2070d5f1c5fd7211ebdbc55dcc0e87846c124fe2a8fe56979642fbe73b483796b0ab6896c700deb0531bf7bceb3d2ae14074455e804980cd42f79bf1333f4d8bb023d7975cee611ba31163ced13cba92c988da4b2b481c2955275b6d9e6ba961d1800732a8f1165b2351b4d7713f75a6d18dc2e98a7c5306833624d79441bdde605104f202741b84f15d03c332481854ef68ed7ae967c39e38b6be47741c9ad11191b07f848b3dc4ea8208069f912a45863845f0cc8b9e54f6c7c3e5344d470810eda4e7df5984a35158f532c51c3243e784583f215c44823ddbedbe7ba7466a51485d130c041ddc3783bd9a274c234913a7f077aed1501e5b2131715f4f11c0b25661f6db63d6bdc595df2431404982d7c1669b520a2dd5877698726e4e947a80c65be8ecca572ad55d3d30e2be11a973f9db2bb710454068378263f2f717636263cc701c46959c67aa81cc5e452dc0b44631e2f896880fa7471679d77bbc05c071bf26c92b305930a028d5c8e053fccf1df31a01e77a34eccf525dcee284a001aad064fb236fcac960b872edd866297c328e9a0d5dc33338e4d29d61d02230d24638c8151b148f5b01abb538bce0351f161511744675b3fa1934e56b89c0578277226ea24650809e9cc6854346d3cc715d5226be13b93cee2ff642560a9317224e09ccc25937b606bf4681bfc111731cf094828e9527b0f5f76956ca83532a91148db9ac521a41287676cb9b79e8cff3d256eccb1e83b3719fa98797c9bc9090fd9fb903be6be0ac384728ee1bb2ed11b8a0d2b9abba7e7c3ba64c307dbc1981a2a224f943a6fdf09724a99f440eaabdab41643b8324d10fe08f978e6143949187724279175484ec895e7f390c935aa931bb2477d711ed1324f46222671387c0ca6b314ff833c6b18672d65784c8d6da755d13d6938ae5a8a48924d7c814971150490c6232fcf0abf8b5946f095f3c094b55b6fabdd9b53a05eb04ae40620610fd7f3eee2f917d0704ff7e942f8c38067f998b1a755f9b71f6dbfc69f85095309b8cd1bcf9cffccc21e899e093241b3aa7957335f3eb39734781d88b114c9bc01a30fdd7ffaa04cd991c83099fe7aa6311553a62e4162a711ab8fd97dbdbc8420bb59dad5381a7f8e8a086b6db9b9f1adc6ae20bdded1ae5f54f2cc546fe1b7020f0b5bf907ba14e269090b72434644e287ef0222aa0cf613ff326de20116e91250ecf68a4a64c7c805a55278648914a58f89af47aba905feb68ef3800f7567298440609543ef98eb5ca48877f1d74c4d6372880bf159446aac8c6973d3e9a200000000000000000000000000000000000000000000000000000000000000002dba86230141cf98be70b9a100f4e10396acbae3b5ef03412e7b6d7386e33c1d05f612f21a5b93a94713028b055d4ed29b6860c1eabfce768468fecf434091910000000000000000000000000000000000000000000000000000000000000000176254480d097c5681af82d50be35a0ab678e2295ddecdc8627f86c4820afa43006149b25b68e68a434c240e4d567dff37e945c40a120b3254bd8a31da3d51721d9e3c334daa7cb8b683716da42b3d8082d0085a0749f8a7e058cfaf6142295800000000000000000000000000000000000000000000000000000000000000001081dc8800812ca37d3ce53585b7c109fbf9c8cccd44aaff2ad66c6f44e0f2a727aad24e85e0a69c55e02d7312ea6161e70368936cdc638af0e3056ecc34425700000000000000000000000000000000000000000000000000000000000000000edc1958b6287ada43d89f3602c88b5dad8be03a568e5b065ff40b8b9fc7a2261ec83b7d0fcd77a848f583aacf4ddff197c19cf2aeb9db0729b7a9958eadfd42250c9a263861aac54eb48159e487bf1e1eb2c47da7f9df3f3889df57fe8d5ac90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d539745e2e667945906f5ea26c06a803f34ffdff169ab2dfc53f62f688a840c00000000000000000000000000000000000000000000000000000000000000002dfa44f7b9cf41fea59b7ede9bc10ca3b05f4245be726ba61bfc2c295c459a531d6b8722114f529f308d9b2c9ec0365fb17e84937c21ffb97cde35afe25f7e8b01fe1bcd97a7c74adb8387b9c570165c327b4de3e3490ba57d1e9e6097901e9c23faf3a28ec58e0b56d4b8b24c24d62c0e9536c79e791bfe4239410536a0abf30f3ad8c13aed4d0a85d3498f020a7b9c1c68f3fcda147105c86b55113375c41812da3a44eccbd07939eaa20ae2a038ff6cf2c32c879c3b6183a2fd0500ac76bc03b729327c1d3343dcf5a927810af217a0e204c2e1f6acf4ec0eefc4724a2224065cba0ab5cb8be682262c2fbd3f77d37837387cf17e86396a138361f14e1cee135246cf15b98217877fe4bf575a1035428071f7cd5f56fb31305e95db4b4e7e0e92bac5b572a567e2c6274e48a34b5ce311842131a17f394b08f3b099ec95e21c0c31373e4c242e651daef0555aee792fc6845cf7a3fa6e385e076d58fea2c412133b0751af656be31f4d989df0a1c2c1f8e1de48f7ce7baa1a8154047d63c1019363581970f4ee3f99c258debf45b0b2dd83d215c2827215b5a921064e4aaa1bdec6a3a5ef15d16554b6ea17edb2c5bf19c1ac8a4b9c24f6fdc84d795b3c280417a05404f8e207f9933488b2c926f361be64472a722c8d0b1a0403344954e50e6c67284722fc42d70f27a15ccdb9bc90bc7ab28fd671b25635c6f1a97203182f4e5d7699fec2289c389e6e2296119b63f73f2916df024f01cf3be94585673f12d2d3d735211872355024335969292c318f305759061394695476c48e7cb91e046d4f802a3441b57e631296002366f48c5c2af22b0d0a9e5ae6007f69066a3c1b92a167a8b4de00566b14d9f9e07965e5f9f8c7548965fa9423b3bbc989793d2d57315d543c037da9cfa7053799625010c28ea67316a7cd78fe88da2da20b5a256e1a9ad561afa0d36eef1f3582295f266e88c8e824a0964d5a4cd38835d139068e8927db5a665c5506e0d04106e623b9348d3ff3cfad13b7ebca09cc41595e126646c1513c6299f5853bda146e23cb4a9990f8b144b58b321b2e1515b7f3b61478e5a38e03fab1213b857954a95cf34b04aa6d604351c4fadefcd189705f55168471d36ab7681edc0ffddeef5d4efb3ad505c30480f4b2283982509e794d1c00bc6d2dfada7b43aada0775eb5b46ae26fc1111f59409cb83c8f80cb2f81cf40fe07f8a61eb8da5a69b606493a55603f6d516bcc3000a5d5efd9972081f76941f7b4ec6d203c2556e18d35a9eaefd54b18afdff2507b2f24eb3fcc704f139341b9331eaf319f89e98ee457767442c3630eed33ebbadd855a1ff0297c80632a01f10186644e07ca57193b88008d9e37316428ab9a4d34305c783148c23fe232f22874678f0e2073d96954824a809ac8f724b5c4750675898aae0e4726363e4d814cffbb307e10d5def91334bb8e8982bf673e0758c0b65437751491c80c080cf07613366ab299a943d3487ca76c5e1d2aabba3e9cdefecd766ef744f7553e3701d6fad9970f4987442fe0cae221cf1dfbce4aa09cd711992f61345838c4837fc15db45985f7f759d61dadf4a93e88818c617aeb15b1eca2a43812d04003c53891f66db30bf61e3355347cff8c7dea462f5349cfc4024e9ac7e0a554185de63bc0b63c574a486637bffa084365e886822332ab4b3da15c853e11214e96251f957148d83cc30133f11394b32f83197a44ed72490251be884ffc6bd1bc6547809ea2cfcd8b098edbc71db72ccd95a7caee259d4a686bd9d57b5f9171293df714efb21c6362090f722af661b5ba814cd2a5143bb8ee3d5d1328d035d6302bb4287e01fcaa57e909613014ee30cb6ec70c62069ad001952fc7b4b89e15ffa279ace940652ffe6ac227c629bc12dbb6c22c889afe6a6725e334c9435d0a27f8e57ffa11f424930c6208a6b70f2afe37738b49227e4b928a6c1b98d70609be83e9ca9612bb35377a82f19eef7b61e119ea3c4e0327385233bee30aba9b40cedcf4919601aed810a23f4596d25890832f27183e2f6e82682d2586ba822ceac0cb6438cee114625ae3e11dfdd25f0872a64605f34c4a008196b3b028daf95707754bddaf619738f2f82d88e12e7dccfac0ca067db715d33408c8a7eb55ae5900c7d540b22', 'transcript_type': 'EVM'}\n", + "Time gen prf: 30.835069179534912 seconds\n" ] } ], @@ -233,14 +220,14 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Verifier gets result: [1.5625, 9.53125]\n" + "Verifier gets result: [1.5625, 9.5625]\n" ] } ], diff --git a/examples/stdev/stdev.ipynb b/examples/stdev/stdev.ipynb index a6fa089..a666b55 100644 --- a/examples/stdev/stdev.ipynb +++ b/examples/stdev/stdev.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -125,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -136,17 +85,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -167,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -193,7 +144,7 @@ "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [3]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":1,\"lookup_range\":[-20336,4],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":2722,\"total_const_size\":309,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-4,4]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709451015079}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":1,\"lookup_range\":[-20110,20332],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9944,\"total_const_size\":2118,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-4,4]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709715644083}\n" ] } ], @@ -206,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -214,14 +165,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 3.3544819355010986 seconds\n", + "Time setup: 6.912375211715698 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 14.625\n", "==== Generating Proof ====\n", - "proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7500000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x01630d95967fbfcc77358fdc93f047ecd8f828acafa3c2e919619623ccee0857253a227bf0c23b22096bd80ff86474e0cbe5295e39890a5531634affc6872c730c83e816b09a8df22bd4c4ded1f126338aaebbdf563de9655be61ac739209d6d2792d7f0c4fdb34e799fbb3ee0533b0a1a1c83d7598150019ee2a46efba0b7841bca988561a2950d344151f9de063af676e44dacf44c50e10d75e37fe17d2e7c1713d4a0594f1c77218b8075b4f6108ba8bf91810f6785703cc440cc9d8ea50d253a90b28e7bafbec148555a035c629c354d864314608dd9cf5dc37493d25ca32d00f83a8c67cbe81d2cebabd9ae551be59793c993728a3a5710bf690a9c27082d5cd86b2625aae582961cecd2be7e6013c39caa5dc12ff630cd35b160ae9a8e03e268106b3b5dd6f163d5d8336482c1d83a8d565de2f937270035ccff5c831d2cfb653b2a11e3a0e6f544ffbeabbf8eccf6a602710210b30ce83d9bf40d43ed07b8c2688c3b7b7ced45c4d9ac438f87743905f4711fa34cad2dcdd2a68fbbc825128b66456c6cb18b3109feb905ee1631f9c529ba21fc465a2e8d614ab7674e233bfc9d4dbddb480e6364d976a0fad06482e48b85981d015f86a7b30b345155015f0d05b1b36fcc24cc329bbc52a49dcea1fb912f7a6be821122e2edf47956415796c11b48808f16f9b398ab666bf6cc11032f6a75ae1585f7af0be12785cc609ff90029747e96e6a281b4cc23efba1c32a17f3a543027c132cc23259470c1009a18c45e648bafcedb428687d4f8b6d3ed7037d78c254885b1d8ce6ae72a66c00577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f911809b4ed29928819ba29f18b7354730bbc961d4207ed82d183ad439242b748c31c12e7983bbddc896649ec62ff24b698915f9110edb90a7b23e26796e658ad311e00577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f91180c3c9ae94c21b2454d15204d2d3c552ffed9e388b3aa05d986c42a26a4861b1e10c7a75a29e2510c79805e73656e8a7a51bf41ad9b5573eeee6f541328bb7eca0b07ffa4623216a629dcb9cb29f538e24c15bf48d0de8734ec2c4286646342af13700248b2b2468d0776729cdf232c1b3d6267ebbcd28f21b5bc2fb77167eaa00b07ffa4623216a629dcb9cb29f538e24c15bf48d0de8734ec2c4286646342af13700248b2b2468d0776729cdf232c1b3d6267ebbcd28f21b5bc2fb77167eaa00ec931052e0f9c6cac17f18bccf12946f977b630d097ff886a0e09aa9489bc1615b2384df2e8850b52c01450e0b0fc123c88f2f5aa98d29ab42343ee6747e59e2817fb12b09955cd869b137f527d62ba0a55da4967a78e86a606ad004d276d291d06e459a82d9abe7a70b179d01987f9b4faf7d91dca3c28920426b2104cb1ec1c2e1a39b90e052ad18245468ab7a016ad2139c8b7b89a3cd677c89fbb25277626052a6fcbd1b104cb6cbc1e4b1857b5ccc2fd431b8eee4a02d9dbd35879f9cb1db13a7291c3cb4a538956518ef1da8837538e89d6a96dfb1c923c8e0aaa0489068d5abb553c48c65d8504b0ab2847e00ad0d3c8f40dc782154ec98aa11738891261a0ee07835cc68f1c18e3a0f651d6db9d13c98eab00504e3b4204da37b8d505021b52afc34ab51526095216aecf885c62d3c241f25c0b5d5bc922950607340ea22177e07ebe70925d6b4cbf2e5db05070f52392083501ec51be8f2b7e76b51b592f9771377ebb5c50381b467e11c03bfda25c3aab7924b3751747092ccd851c848c8660acfd3f436cfc5dbf213e9ff5ada32512a74638518a58800236103d062901b48614232ca507e98e817c4f87189704e83359564234267bb90a3d9f7618176e4ec956d971e63227b46ef4d4b15ec78dbb10165f5c47b4564bd254355a176a21860787bace28e2118357ff53138a7b735506ccb20fa11823313e39a4c405af35b7089dfc8b28fcd5c79d51dd4da3229902580a83636771f78b16daf9bc27aa6da2c4507b2568893c2089b664850e435e9eafb4743bc6ef6ae060b45bee21dd03582e0e1f9f282e816d506225de23b5655175c12a93640cc8b1051fee74147cd1f5b2ce2fa7ac17d5a16123f10e45aafa5fa8edd3f757bb9a24d5e12d8919a11e37a48d83522bcedbcd55a5b9b339adfa2f7641a6ffb616cde16ba13e7129eb5ecd28e0c0e6c119dfea17d479485dbd66ebe65bac19443b3cff820e716e2f94939ebe11076506961ae8883dbc6edd13a8daa9415c633b2bbfa182c81ab501f29bc9557479cb6fefd6545f9d2f948d81349ad55b14cfbb090824874c9d742b09475d5165f3c91399555372b357b8ee1b5322dc00e0bbae9f082b47b41b150fa5eaf7f7f730f68b01141ab4830f812441904cc3cbbf028e8393c30c8d248d11dbd070d5e4d899b430966eabc4e782fbec933b44157c9429f2a63b20c8c1a7196d8fd0a5d0b938a971b70bd58c2246b60cb8c0f3301f1d3f5bf73a62248f03205ef8ba544fe49a853e1a6773a2602536d05915ea526cd444f82416559bb9cf1fd5472ed8eef65d13457ce8a9437b06b9ba1991ec05ee624689b74882e135ee15123f6d5ea76bb32c9074d28e5c09465ccbaf83d4e34a670ef63671713754aa269343beaf88960c9da0c55b97cf9c82f8155497dcc2c2340c1274fd9cc5482c15a9930b54541d39922cca68fb3af17924f799615db59907ad4c70215e0069f2070195e687a543691b5532a955773f1e000a492c24679bc197a7ae65bb8287c30b5df37bb3a8dff05a23de15274694648b796af04da8fe8178bc221524d128e0305f64735135ec8751ee99c5d78faff2e0d69b89ea243a0668a78dd2997fd4190f73022d8a9ac3ab6f965ea08a7b524dccd85b9db018877a3d147be3bca78d8e1952e051a44472af5dd2cfdd080634f33251b2b0578c2e3809815923609e09f10f448594233a5e3b9041c6432f7b277d98e8caa14fef7db2ab83f258063c1770027da6790aaa4667fab151ed0c31fdf5690ede58a58aeb2ec14c1132a519a56319d7e7cec7e8042ea6969d727cec82bfd4997853b861769ebbb68af5bdc8570d2d7e2a9d79ec3398f5a653f6bb909417d7ef2d4434784d2a9746102936f006dc06061105306cfb99f08c2beacabec3634152ed1f2b550e8c1a12fa0dac013c1a03cf449e9945b15583705954ceaf4485073fd7d0c72244ec21a47eedbf80b0f31f04b46ba14dba5b3a1d3182224e00812d725fc8f46adc2c4fa1a842390b118221992dc81286db28f4ee403ff80a94d847c0ab1b83479b3c1a3c1d08293336472f4770eeb0d973ebf8d57f359205d7da66cfc211a2d4037074199ed5b85636162e872376f1f650b614b40fa69373674fb6ba9b688215ef2dc9d63f099f65197517125741f294d75302e44045b8dbb586476eeab1e2e6c0b14950444e3b49ec6704533defda18aaeed5aad25567f4dc13ce6ed023bd8fff5bb78e28ee41a25db01d29152b503bb5819460c033ace6cdeed01bea5d85572d293691062d92cd40c628520c2150a8951beca783b625ffaad3ca4717b0fd1e5db39e75db647b2a956f0ffc6b06ee84c2630196586f41ecf527e13fa977384069518386d4287c4dfd9c1a0ee1cd8769e6a18ceff7586c5492c00aa3d1ae0b6e650749ca7ae61a59762102cf82ec54d49c1ec07ac662fa94ddb528e12106c3bf89a841af69864f3780b71fdd5880696a2317c12a402ff983ab051539399ad4dba20a1646d33b32f254610000000000000000000000000000000000000000000000000000000000000000150169870f0a0329db699437728e2d2a6608dbcf43b6a00bf86f9838d25ad37f0000000000000000000000000000000000000000000000000000000000000000217462a3f2c089738f5309bbbb12d82c0ff0463a38bd62488c1d4e0e6dc8a027000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023f6a4b95cc49955a747565f9e1fda5933435240b52ebcc98024e61a0b1c214a00000000000000000000000000000000000000000000000000000000000000002defe71b45f5a78c1b08e9a67b707a79c3bba17ef5f50ea1a045e170c9055c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017cd9bea039bcbd5623ac81cc66c3f0a23b7e66e025da9a8adbcf25f0a241086000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016d03716a4f8f9f1f5ca58e0fabf7e127b7b36be8d9a504d26c3827d7a85aaf70aca577d00057ebdd8d94ac2d5dcce5c1342118581582aff099365dcbf96860900000000000000000000000000000000000000000000000000000000000000001ca4c4a07cbe64c1411dbc1c2ec4f94d6e7e4f62c6695c7f44af3fb19e8ebdbd000000000000000000000000000000000000000000000000000000000000000003ba484e6a98985b3c8f55d49a85d09d2570b78e7e1d397d9f77e365679e3c2e16b89c34033ded3e3c86b76641e1f129079505a3de51fe6004d75f3a698ee92214eee23c0fc5e47835ca83bc7c7a4f26e1e1d2294787a457f64906364a4c0d98046f2c6dce6da74f062a16cd1c209e2e65863f58b6b647896291c27cafaaf6d52212ef724870a9ca8a78d73737653e775e68faa1c44f7dc8fc7c5b9f2e31446229e0ff7e0ecdf79e86f1fe48566f32fa6836cd7233214748f39346561424ddc715415320f9a009353b8bd28998b12a870164fb89a77b6af41701c133520fad612ce0ae87e0829dc4bbdf5e2dfc31736cc94a50dfbf987f670206dc21d18ef36424ecf4662d949409b90066d51dcfa5df1e33081f75ff92bea44b70d5d82cd86a070292acc71a0d545a481625c44f753c97ec8bd2af9f74945a2100c8680c690a1443fd2688ed5038b6938d96582e2774a5ea94c69c1323c56f0b558cc1e3632904dc12fdc46b446bf3e41fee5f832ba3a7fad396b1f9b828a6ee625c4b608ea21ce945da0ea7219bc5baeade3060a3ccfbf48312b08e141c3890899584241c96090ef45d173ce9fd08593ff1e04a8180d3f211a5f0bbae65a671d6ed8edf28710e350ceeb638fe222a742c6add5a3bd72a5b62e5b1de22ce332b169ac9410cdc29de25e5a0efe7d3d1020a7fdfb2fc13e11652f9d746a4bcdb15b02a813a972416e838636f4f88d38b371ff0e1c1b46d840125ba6458f9a449fa6e7b1106b09c295ebf7722a0b9f5133c09320ae1c3e6a547255f76c775f3031aa250e4bae8d41a1e55a4c3946c02f53f4a5f1b259359a7c9f388afc3455506ef1ec26de0771b2f105bcb5518e606d34595ab988a0a7a70b5172a2726f25b0c76edc51e5431692af2b6d7c87a6993bf39bfcaeb45393e3c1e51e4377217c2624da0da388100a71ebe3cbb050030522b4420a5c9b64a35fa1366e3d572459586a29980ecbc44c410fd6168476b85aae750b32aca3a8285cbbb96fad707f2b29e1d42a97cff260c0f85fdc831be6132c2a6c336cca8cbb7f375f21192da7a6e1b6f0abde887f3160a27dab095cb3e669e007f32b832830cb5ab812055fcd32b80acdb8181feb2070b4b544068e9240919cadc8d23f407562f423a922f1fc8e92fda8130b3887c17182ba2547b26cbff2b66651e49b501b99d89aa2455679dced9d95a5702ffe68118b3ce3341ecb58cdf04ca2a3f85a3a38fd2e6bcfc24503286e7395317ec3a81207a312dcbc3fd5fdd5bedded39dff5434dcb5984c96be9d909305076f17da0712c96807349d5ffe9b8627a32c223e9dc8038f4fc1e3b1080406bfc1d2c6c7122c6f339ece347df3162b06f6ee1b635fc4a949f85fdc8691ec1b2baca727f16904d5d1b67900106a2c83dffbf0e57dfef02c096d41742eae9e740351694f7a63182ba2547b26cbff2b66651e49b501b99d89aa2455679dced9d95a5702ffe6812629e553f76b59fb873da9c0907b40551c34753d6c50970f58ac9a7b71a4a5c617e605f47e97d3004b046746182035db2fc7ed48631fafdcce44ddda938375e51ab0a86597afb62d152abef2e6cecb77020a2e3dddecf8331384942d3feedff11cadfeef2da18d9307997a32b6612486a65d87405eba2d669145eb26365f7ad22ea1a751c904befdc1cc657b26111bb9ee9770902ef44556ce81cdb16448d7b6268be35bbafb879e88024cf2230490e3ed6fd0e68d2f4831a34d63021ca44a9a0506c9a328c82694fe141038dfc25d4c66138f1a046e727edca8149af9d652bd1d6554a5607a90416ad4fdd4db56a81079a3ff6ad0d3c22ee89737454832e4ed268be35bbafb879e88024cf2230490e3ed6fd0e68d2f4831a34d63021ca44a9a0812c6cf7d3e573afe13379e87a7c1f13a646ed3b264e1804736aefc3a8da1812d95110411c229a4c74f0d8d1168fa9bfb2b00f067992c25218e5a15d7e26e480d9bfb83585a37ea9201fada62dd5d76d082617d1fee3b099f13da4657e41b6213787a74c8c468f1bf9336a62ecd994578c94e3394089b15a6816515cf368b43', 'transcript_type': 'EVM'}\n", - "Time gen prf: 4.1637749671936035 seconds\n" + "proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7500000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x26116db2aaeab71204d7291cdef443716025ea95d766eaa78856d2ae8ac10a7802d892acd07b3202ed7c2a25739aa59f232df3440f9d57d751928fe99e15d92f2c30b66a8d2ebedf6e97598a3ce064944df5b09553afa1807bdcf68a74057cee1cd4db71ad1cc53a4727bb22d22581619e8a93969befcf63b35d9ef9ce3ad0ba2bc4f175813a35482aa2713a844ee88587e8445ee50ce5889dec4061c6a373591a47078e7297df578c9923e9c88920be6aad7c39c8ce4bbacccc9c926d4a5397182edc51212b4e7d0081949a46b1251a4cd71812047fcf60efb12c5b3a4da87c12ae289f61839b82706e5c70bd53ae5eddb161264672df55c1c3e193371334301d7e400f430887cf49332ab1d21a7f667e04574367d6750082b4fb5861f5f23a042b7c175a400a22d551ccb69f0320131828bfef054bc11dcb351216db3dad760764647e819d2c247d4c2ced32b2db19934dc1cad8a309903fcbc76e0f36af120a735ce4eda83cb6c06431ffbcdc9dfb08b4acccb94613b757ca77d52e50fbe90e0d9c5093e81d09cb724e1e4f0dfd6bc5d26c170524bf343b7470f66726121c279254fa32dcee47cd970cdd97ced2851437c6edc1eea14814bf8aebab014cfa0d2f51715b8101ecd18fa1bb066d472265f5ce7e22a1d194a12ea3479527a41f0f8462f0b67fdab9de8726abd62f7f90104bcabf3dbfbcaa49c080f1a54d40d51ce39c8b895a8dbcae1deb9323f3475d8fc00cfc7f89015a07248f12e3653fab0ca8563a80815b0be00fe3e5b1692f2846ede8cb9af1785779e8e30696efedd52b2dab644a2125c2e19c379b0990c5ae6bad52661406b72e6116a664441918d219f94ae34bb051ba9a773be61e32659b64e1b8d08b956a127e02d04a6c6bfc2b24ceb37719cf3962f7b4bfd391f3f32229575ec73e1b6d547ac1c49fe5297b5d2e2d2177534ef75e128be91e8fd327c357927b995beba59714bd58370f3c36f31b33f94442932e5e68ee7e14e4347b0e373c83ced554c20d168bb3ceec66a8f20204a7140dc795ef9455ba3fbeb50fdccabe5dbe7bed19469a69af1d965602bd10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412ff72d37b657a433e775b98e4f0c65fe93c06af70de3ba12f6bfd8cc57af10131cc4460a9bb7ba15d18e3dfc9aab80e0e153b97ef3841cfa58f4b6b231be74cc0959060d38199e65ce2d00f584179ca34208f231698f011eac33cbc44dcc67062ca1a8d42d3cba1856c609ad5a17c2737c28694de10cdf3646a9d6cd13b3027529954a5008dbc3b1ecf26dd70da6a34a5faa7e122e86f4fefae032da0a9f7a6b21692efd9956c9ef78ee1b24c85fc7bd14da03c2fbfbb58cf1d16c41fb1d3fb21e938a1795320e658eb3ed328039ed388a80ae9f1ee6df9e2392a56227ec3e651c6d6012ecbaeb205a87cdafeb668a0a97b7ba8a4f32a3d1686f48308383b51b1db38b3bab05105d2e00ecbd48971b46165df4170f4ba0e1600c53bf6bcd289a1e642d61aa1da327d2a8897b9a3a5bb92c5d5b063080c38a47c107cd92397de707e9379f4328e56569e4701c181dac2ee3ade8d515c7028325816e555bf348be16e4de2d7bd8c84dc7d50769d276d1d941ea203845d796fb0bf2704fdcfd4d2c2239ca12008be268d1d998b1954189a13be621b0bc81efcdc9e0274b2dfb744f1af0376f7eaf1ebc346e0122131345a485bf721d209b6a84239359b10d2cf19e12e89b77d17ab78eabcbb9e8fc5b660d98934c7d6b8b8e52379a64cadafe46be2d3b5cc8c10ead0b17d836801f9691dd9354cb2cd3ed148c80f180f2f6e47e401284f600c8d84bfd9f82c96068a6e41d064d971b7e0216f8636b53471b90e4c21ddf11d4156d6eb80f86bbcf0279eeff278e2489de5c3875555ffa5df4882bb313cdd5cc0bd5b53c90ba29b2bc4bf797b0f947f87c975aa009fb01d63a9d356118e4caa9543f38866b8c3cdbd66f49080b3ae7d17cab2f0628aff8f3ce59f4cb0ffdee56c7cd3e1819a804181b7551fa4ea994193fdad6f2f5436b3fa6e357e30b704c6429ca4df17348ac733baab1a712c488d207b0319d3ab23ad19c9ae35d2ed258112c040c1601392ae6dcadeaa5e7fb713cbdc3309688cc8669dd11e5781a7b92f1ebadacd7f915e7fc8ef2f6e0453accf575cd451f79d12f4448bc8d0c14cb162d7fbb4237e3de41921d65c0cc250c2006116cb35f17fc168695d755ad20b76e1026dff71582d93b824df342275c1b4f9d4624636651dd1e75693b2c5a0a0f8750a04ea4fdcfc9801c85e7679e9be4a8c488571e3b483aea3ab09b07bd198c775d991ddd80ae7eacb2e202461b2e8b61ceea36cb91d1a3e6787a886b9a1d150b9dc599cd4f51e8e6796aef4604864f91de98406e01429fdd1c6737551b1f3d0f467a0c8e0fe378652013be42b48adcff941911fa8fdb1b0c13015896ce2ae2723daffc77466f1e94051a1614af19196decef1cb1af0f2670976109a3551387d8ec5f985ea1ad70172b96e8ca4278d7e4568656c43cc699702bb2b8a3a6123fc851f3f5d781227e53bce8e7a86ec2987f5478ac60cefd1262fd56457b422a8b05b1a6ed74a2851ae070935bd2f2611d1204cceb5972ce8f816aa106c808241cc1a670400d4deabff849ccf6109c8ddf50f6a83fd8b4293ce42f81ac0b150c0469579cf201fe236a5c39cb9765378fc06f3bbde693ece22f1d9de3283c24174236154606e159266c7e25b08d342470d116f9b518b5d9f6babcaf168c65d82a3293f753fc15f3451c13336e644927bee8b85e7038e4dea90118f38434ff7d1a0dc329cbcb2a916c114d5eeb27e3cb3d0a71617d978f1af7cdef34f59e27ba09a2d3ece0dace3805caf459b05cbcd135665e53bd562bbcc0d5d658721401b5147631363a38caf547062bcf7658c5da01636dc378797ff31cac91b077eef9761469d262c434f1cc5a840b48ee2ace00329220149ee8dffd997734b62187b9f62b39dfbf7c6c35137ccab7011067594ffb0a0190eb75af6120de1be12c9f7c850cf249b0ea4c287978bcb0499d889512e8d97d2a464faa66eba42fba34d9ba56263540d2f2866f3447dec9b6d21d5b6dea4b51573e76c7ae192f5a923871b77f0961d24418c02fb9a62f8d05e3c5c2d47a79332f105c079304853596d5d4264b1da1c825f4976eaf31fe5ce494090466a347164c2c10979c282bfbe5084195762627406b5b3a9198d92b900d226f86f52949d34c621205aaf69994589208db3f2789c0c5a5c8053fcb623f6932e054bae6a698d56b2a76265127e1608cc193451abef3698876f0fe362996d0fa3a9f2c15cc0bb610bd9e171e34e845fd0ef8211d1775a366cc480c48ec31a1ecc371dfd89a8c411425b5a734e9879b4ac81a0413869a5b277b2b5d35039d721c6d5959bd00aec28216441f96f764bfbdd28f980a306700a59125cdc54f8c182d7aeed1cb8d6759ff7f9706715be5c0de18b3b92ff9e921958aab018fc696a977a6118611a2e0df591bd3e82233b0ce5112156e224464174afd1c168464915f48168025b890fc6b9ee5e7871651effcdf9a172c2a402b1af8ab7ff776ed5e881670f6e8f1fb0f5fe8e5281f644a439380e8a5d206de1bbcb520e1e86dda5218ae14f384c7611826c65401f1d868548f00a3523b1558cbdadeaffdd07e41630c5ea55b4d3b74ce6e75863104392ff473ce72e91102479bae65020c3190ede08a6613602bcec0b9a55cf34a54f6baaf00a60ef41c18b2e32fa29067a1d78c7d703e93b51a60d5f03c83dce4d87b781d875f580f5f285a79185a1621a8748dcfab966861b0ffc5879141830d31fed1013d477c46c00aa9f96230e6262927a20a77e85e2a300f3ed0fd60fee8d5d229f301b62a90430000000000000000000000000000000000000000000000000000000000000000066e04d1e73bbe940296482e0e00aaba69505c56086512eea3e4edc21d3909290cd12b5ba61361019e4a9775d34418313615a818f79a1e24f9ec68209899f65600000000000000000000000000000000000000000000000000000000000000001701cff2aa8d9ab8a9324ab50e1e14fe981c7499fa28bc4c3147e944ac89c48f1898d6bf716a5eddd579241bdb941f615aa9b1146c781275ed01ccfc741a9faa2f42a89a6e36bbb540c0469c5c02b96c5795b441fd8c849e53ad71024c8a246100000000000000000000000000000000000000000000000000000000000000001a9df8ed4264c7fd68291482c9b475452a7cf0d58043fc1f0ceed0813bea781d0cd12b5ba61361019e4a9775d34418313615a818f79a1e24f9ec68209899f65600000000000000000000000000000000000000000000000000000000000000001c6a65e4dcea9d1436da308fda6fb3d88b118cf9ae18b66fb831e96e60d2a82100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a774fc3d8d1d556eb516d830f46037ba0c5357f9d57afa190104034d59d17d22fec133b8a47a44c6efeb19c3396062207f55f0acb3f39f78b2534e44f20259410e1a2254de05ddda861484cc5b45e44a60e92fb6e7fad49451147488f598f951b041e12ec794cb51374e02d77687903a3ea7feb720e2e6b068d064ec02b8eba0dd291b7755154114be6bcee6644f813bc6f5df94615c2d0a2fbc89fd1f3c85e0000000000000000000000000000000000000000000000000000000000000000271660e3bf3200c1584eda09e0c72ef4dfa559a46304e0045729005271e4672711c6b6049f5cc21155d7c58c9948616c3e7f25ac7a1b9098a0a277a6dca48b95207a8cbc1de9ec62a65ae4c03c4a73772032e3535c78ed536e50b1c7e0a2eaf0271d044cc07d4b6882330379f2428e6a475afa67e104bfe9afc5d4dbc271551c2bcc2bef2e47fe49bd9067887b1d4edbce76b82ec7575cb39e61f6498bb9930e06b46ee440cef34f9949b75ba33d9d130770329e62f8cc3ba1d498514e9e1b051c02675ad4aca63d1229f11d1bf2dda28da50e7d7eec3669b45669568c8041c601bcd7e9cacf705016546d45f7b8a8cd86b3944469fa80d59fcdcf2232a601b200a8d101db3c1f909138b2d42995104610526180dee56f125c09e536c3c81cd20f7c2dbe1512b04dda2ec1aaaada975fcb2b815fced3343e5e09b1361bb6bd132a28cdfa12082a56935a8d5f6b9c31568ec3bc5b872818f28838eb67ac32764e0e833460d77291b62225d0d9a73786a19e20b0a7c6082ffd35e78079e40e87352c5d23f26871ca81b9d40165c5fafe6b2cbf9d62a26ebead852a0bd4b35f8cda29cd4610e4668485061951a204d156eb671166a5bbd96b87ce4425b3a7aa9b7a0b79e231f2304636505cb875fb1053d24beea1ab6a0dc9e2ed1420fffd2fbc4803a59d11eaaa11236146c56e3936f430ff63bfc0a989750e1efd9697ca92d3990b5069992b6a71c85cc91cb26adb7fe3cd12892e97d0d980b4f85862cdfd473d1d057c64189917cf8f4bee3aa702cdbdab4cf348b17dc965c1bad22733d8592623d431ae408784b718328f3b3da6f010f00991238595033578dcaee034fa97011a825a3663f8e5c8db6a7424dcb475ae4b85dde192a8d16ad6e8e9f2b5eefbbf0e75a6e572a3cc5e9540ff7db9961d22802b22c43ecefc1b530cb41ba1d67d3524ba9bfdf7fbd664dbb6045b7ab1c67a3e849b1decbad7361ff8c29c60daf2d406731158ad835e88577c4db1e8447d6ed4f45a7788e67b45e07e099a62f47a85192374b00e8ae4634cd19478ad4c2ea5c46161287f022650f356a440e540c9ac2f6b6af9692988a05b95bb5db5815ddf36d33b94814855595e2d6c751995d3c417f4bb4fe5bac4377324ff7bbf8d1673554991b5837fafefeafd8df21338d1281e9119324d56a342d103d18a67a94417a97b8dc109dc4cb56ee99a447d1ca4af1b1689e41802391734d5a1ecc91aee54b2ae86d8e9d3a20e561013bb0ad2a0842d1ddc1e54204a1c2df6ab3cf8c37df08123ff9a18b7e29717e0eec5a4761c5825fcd8f7b570fa53fe6b732c9a87973e0934f225ac2e10eec43c224cc41346ff2cf206e5ef1b70446bd046f34b05e7c1546fc2ad4f533eaa1441438ed9a27f4f0fe98df64eeeeae89f281ea4515c2a26a7819f6b9217425b794c618e315041e712569a21bf6c65e08480ad1a093a4614d82f7db05448b1afd8df8a702ba0b67f123bd16662cd8b32e29e5cf92cacd57f2bb6589a5985cc3eac15269ea4c7900d254cb8d6d1df478b6db683936edc52cbf791befb15fc6044b64295dc95729f3d191f28bbd09d35337ce863be4b04f80be5961df87c506b4eb2a050891b2e4ada2d93afa7443ab44a0d47ad761b58101a3d544c6623c12aa38705bf8256bb492905c1f340774e1478bbd84a426b7304f994eecc0b4a46c9f2d406b958a879dd8b0bab3bf169f637bcb0e31d2f50269f83602c97c066b644d09130a9f77be08ca9177aefb5a2490d66a657ae20793a442f5020964e044531544bfc63649960d1392a1d6643d9909457569e47dd1c559fd72d0d3f503dabc155e5e1710b99280ac0235a1507880a18b70b8dc280a6c2d7f507ad01dd351e4c427e3c6ee33bb546f90713a8776289ffd2f44f38a87ff5278184f5a74f2159681a66ecfbee6b2031a50ed844210260c07b061b8a0d1732f168d7d9e0f75829ac4f8f382865cae29c0819e7c7218837683a9cc3d3e5bc9e0385ca5bbc5568b0d2621da913c065d3126a', 'transcript_type': 'EVM'}\n", + "Time gen prf: 8.47111177444458 seconds\n" ] } ], @@ -237,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": {}, "outputs": [ { diff --git a/examples/variance/variance.ipynb b/examples/variance/variance.ipynb index 09e36c0..a5f31fe 100644 --- a/examples/variance/variance.ipynb +++ b/examples/variance/variance.ipynb @@ -4,57 +4,6 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==9.1.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (9.1.0)\n", - "Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, "outputs": [], "source": [ "import ezkl\n", @@ -72,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -125,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -136,17 +85,19 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", " is_precise_aggregated = torch.tensor(1.0)\n", "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" ] } ], @@ -167,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -193,7 +144,7 @@ "text": [ "==== Generate & Calibrate Setting ====\n", "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":1,\"lookup_range\":[-5082,2],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":2722,\"total_const_size\":309,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-2,2]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709451045416}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":1,\"lookup_range\":[-5194,5382],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9944,\"total_const_size\":2118,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}},\"Abs\"],\"required_range_checks\":[[-2,2]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709726342062}\n" ] } ], @@ -206,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -214,14 +165,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 1.666565179824829 seconds\n", + "Time setup: 1.7752339839935303 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 212.5\n", "==== Generating Proof ====\n", - "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', '5203000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x04c63f5018b3c3e85803cd04109b86b6db628a889f6620a3dedc99830f4fa23816b46f09d935186373d669afe3551d407726bd229cbbfe9171add8468c1e3e6c1d8c75274ac68bb8b341e170840465668eea872b55f9ce297ab920a681be1fa7188215ac288ede99f7aa95b1c5d2a0a9befc12e0a362ea343454ffaceaf57f4607c2a58156dd68dda2228df43484d1bc1eb777df0cb00ac4bc145d33dc005c192121cf09d689aa74a86c2f87ae17117eb1b1c26453390d87df487c097723785607da72f5d0253a7fd00cc0b3ad2c7c9d594fbfa24505caf78757996eba62523f03a2c7dad42713bd8b7c3b6d4b146e7484eebeb91a234c65bab5c4c8777d3c7b1e014853b2b5c4fe215eadc92650eea8a0b3a7c9745491c9822f990ab8aca08b18b45d44749e6dfc46b3a8337b0a6250f1f56b59fe49f343f88157c44109256726ef97bd7654e2d91905d67087450f39ce73ccded6d64326475491fa940ea46d0769a70081ccc8a8f2254d4ece5526c4cf2b4ee2e45d454ebffab744b5a8bb5c1c79a66117c858c88ccc66ee8e418be34e2045cd970fe91b4079209dd72821391c54d9317992059d6aba5e4e38edc90aaafba4119f14fa8fdf27f7a6062d577308a25542ed3d6568b1279ba0542f56675ca5e2560cae47c58b71c6061267809526e2d6eb5914b87ffa1e538318c485bbaa93b7dbb2137dfca6e09a43af5a6dfc1950a49a29541a50f7a8c11f891556f644496668d8708b884a8591f5193ec1622416ed521fb5be6ecc484c4e4d34101826797d97df9a3933b013738402ed7467105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7115478743ca949680bee8c2e2a8942911176755b39f8e63efcba876659d119df23bb25125bf2b4c56985b2f3c4f54c0130a5060e650dcf6bc6ab5cd08f3ca2e6105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7090ff4a98df10b9d2cdc9066cebe5c2df6322ef595dfe3cf08892aaaf49bbd920425383c5983a87b273825e40ab4a5d53d97c1ba5757f2abc6ceeefe85492b042955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7632955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7631c914788892d71a78dc2583ded5f88280665a9fd74c9340e6f13f93b9dc2b17b1e5d5a4cf97f18e278523fbb6ecfe94992821dffb2828a1b96efd3e77192a9a21b20157031ac78cc867916acb336ae159540aea93b9e826cc998ca70b79f28391fc492482c0650faca9c465d7bb1fd90826c308b0752e5ef956532655c3b50220dbbc69dba219b0ccbd391300b037cfe31b886826e4a042090f1843d15668af806173d0c009fc4c7e2c9c93b1eb59f0f0c81910a7d6b57462ed2c11f89a8011f11205f0bd03f294e5cb7abd4bf7b35d4a57721e75e258407e83d421b2f1f2ebc189d294087c19c580c6a77e580895401f6d848b059d2585ff9ac3d3dd8c3d4fe2354db6778ea18fcc7106e042da235560ce619890ad91e758d95e18b30acba0200c5c44017e2d93b6e0dbdd0b2eb2d00118132d85dd8b0d24fc5899a3b347f561005f81ab4063b76fca76ff087a00984c892c8c58cf5c487810d1a26c24d32610fab13907d85d60855284d677d7ef6507a9e2daf0a8bbf3f05df11e2b82e68ab2f1348ce94c6a630cadee0f523e07f594a8ed3a26ecc06bba3196e39d73e890a267eca57f7b816dc06a825cd3edccbaa5f3db0e40697023e81bdf810a9aae72d28479f6408e4b3155cd6611ca493fc6db89453a2a0f75d344dbed4671ef236f423aea3d6bfd643cc170d76e6c5bbbeab67461372eedec4e75f1359b0cb9b0147098222a3105c9a30d5bec46419877f1e6d08e35f822aac71cee1aade75b5d1c82b982e857e877e294a3b876386e6d65f7fee7453808813ceb1ba655312832ddd281506fa46749fcd3d9369189b6460250fbd1b545801f1f57a98cb3ca34ff77c1a03a122ef3702e44ff2b1f26ea0d05a8df8a0dbfb7f26b1cf558e9a8d56e86c1f5a7348401e660e1501f2b32e748f301a6450bef2dd86e328db849b5e7fea23232cc2216e3abdca7000dd009370b3d5038d66f22ea2dc8a48f0dd04525d04691821355ecfe849fc3e6783de238b991183c378348ed9ac9e1ddaf34259d0654d24cfe9bfbd51aacbafa6a06bc46f7de1505532f19aeefe81a3b72d1ff8ca288c0dff67cb7e7ff16e14c7efbbe8978a93c7903ad12e720ad90f7dd73cc3fc5cfb1480a788b8a7da9b1a79e0570403c9110ea801188a61814b1c26c7f8671e8ca1013662f83bea239b33d90ce54ad19dbf980f57e2eb3336040ecc0c0cb672111f073062f3c38fa183653c820a6309e9dbc7f0c11d85433bad6558789c1d90e29820c5fe3ffd4549d4d88d06d5655b5fb7e9dd44ee4a5fb20e592886f4c293ac531fccb65c23689d4d160a6baed637c825fb9ba595e080a5e841d68c848d01352d0245af72b9ca6de23300f5c7df741043ebb1a712c0a377c7b779d9133d70901d09ea52cfcc5ba9f04c38958db1075b0bcdb4eb7dfbb74ded6ae8194bca7527332d101a875452392ef3944112f5d23968c4129d517860efbafab5187dfab443f115e29a956d22ba595dc3bae6985fbba13efd32b14b1c2dfa4db067719160c0c91c559ced2016f0b8382d128a25f973e401278c8782dcf13436c31f721511fda5265d7e1a67f07ce85958bfa763eceecbd1cc2da6341d605b73fcc1303421f893216826d18799794fa110674be7f8ea7c18893f1d3a17df4bc5c7a7c26ea00f742e7966b7652342f22e8087c2c2d36961ddf18fcfd2675d4be72a35b9a24cd97c0381989071f3449717d7ab9f00664758c6a8800a9326844e999e624186ddfc742a9fd99cb68ef62f0b2159b7683586ce41925c51b3fa16c819b334bca039844110d2e449ba1cb838776277efb9b345759f20838ededbc7c4dba02f3cea734c1e24bd076050c3ccdcf7ea0220a3ed673ace96750bfd2c8d4fd0978c3c965c43882ce0660948fbf570dcce773b41534ee169b91b43a84542f45ec0d2422dc7206f2c29d7fcb200909f40d0ceb558f2314d2de3c24bcd3f862c5feb21ecfc0f1db71432e9952619c0362cdb452c62dfefc92fa5ba08a7b1200fb0d6ac94b54101911bc74505b7e21c3f5bb4c37263e835026d0672d4bf110cc8b969f27e2a2b8a8c1a9a1eb0a65f58016cd51cae5b0926bd8dbb972d05281e0f6653e7553be426852e0a96e6b8c1671b9094b612e3547f702621402e28b4833cdff123ee0d5dba791dcf79001eb34522b4b77899bb8b9e64b5c8c5a076a6ffc8516bff3a5a8dcfdd024c64f90c3fcaddeaf7cbedb5e6b82b35593785829278bfc443a921f474be3320f775c8f1b824e3a5974c2507d351df8ccb403011554b0ae3d43ef676e26958198da1392d46b2dd973dfcfef5a07f540e454e2f0354022278166d2386c2c96e0815b7b76cbae2f37abb45d78b86053c5e7ee277e08ed176ef8eede868ff67d703ee1b6c84e6c424e03bcf07de8a331f7553d4f088b2f2a0f0fc98ac4cfead261c697950a5c8e109cdfbe8c21cc00ac1922ab74956beb48eab791dd8fd9588492239b40860d91b6879be45dadd3212abb00fc5dcc8f3326e1ff2ecbc97476d56000000000000000000000000000000000000000000000000000000000000000007f5bf8e528f9a1ed9e081073cee9bdb9bb5013865e1065426f73fa14f63278f000000000000000000000000000000000000000000000000000000000000000018f49fe785f238cdf3aaac16d92f79dcc3b1e430b84d4b18ee2680f4f13282c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018af3c2d372830d69165e787319d74f0e2707e09499eca89238835102d2346fb0000000000000000000000000000000000000000000000000000000000000000026c265ef564de952a1e0f973983fcbadbc23c8b9b14a1bfd755164b85da879d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001974f56e47dd47081c9e8372f840585d479d686ea60cecbe5e47a1ef6aba642b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819406767d0baa017d01239de5720e159b1af19ae872f17e116a2a558471e162266fdcb67776469d9b110cf32e162eb58feb8fd370c42ca27d2c71f92a813680000000000000000000000000000000000000000000000000000000000000000047f89a6759fd22271d2a0274b340c7c7f7b75c49efc2800dcce6edd84038a3c00000000000000000000000000000000000000000000000000000000000000000cf981f561e6f8daeb35d5075870305f73497f40488b955f2d395c4d19807c6e089dc86ec25fdf3849bf69656ac890814b2b02e768e21344b9ce745d06eaac8810fe5afe7b98459c0f11750d86f08ee0b49ed530863790519be044bcfa1c2018069560c22860af504147a527e663a6d8c0151c70f33ab41059905bc3f4d4d40e0f01fac6c28df86ad960947073a031c6fc69a5265470ad390b7bd8b4c790267d27e25b1586e1a6696b4de46a5b1b3df33e385fabcc1c6d5b7b9df684f2de2b652a87c90ba1c0da85a5943c9e9529e620a85d0a214cacbd6cc39698eaf7e9a88e2649da5a38b3713d3067af5af3aa4bac554a7d839e32535f018b0317366d63372fefb1a0ec0f502990f6921f020a5e3e0ef407bbc4d293f7694a7a8f7ee4260629a0e6d6aadcb9efe9756921aa2a3e138d6ecf7d619fa77cd41842044d52d7e6052942b0f2102750bb3a6f81b68e82c14b538c85e2d3db2110f4a2b0917e2cac23e07f8c0707a3345a35e28fbf0dc6fb0c79f6d1f9af5bb31773a400047c58ac2037165928c4e2a77dde203bdece63371302b7dfa3a3cd0c6dd5a3c3aac59cca1fd4b2ff7a354dfac10e4e247990f655407db0c360f56f54fbaaa6f7c83622ab11575757cabe50d26dcc3582f82ffe82c2a89b1708c513a82f77e4a6a434d1de00d62f267c7876b288176497ac58983ea91f568bdf37ff9347ba45462af8e04a057a203fd7965227425d7ee6d0e5d212b97550c8176bd677154ee59c4d65e0ae0b8c581120bb2dc122b799dd36e4bfb2f744965fa2b6ad0e7488f897ee7720dc2da591270f81ca50b6039e94d3199a324c78aa01655cfabd6a1744a596d25a261a833493c978b6f6207ca48d168c0672b0544f10f3af0f52fa597a20f0d5efb721f6a67024b73d7dd39c1bd1620f1fc98b26eee0aca7eaec67dcf76a4c79a972251e1ad021d2a2e2216b51150d4bd8638b13355e419b992025ef974978bb5a1d1571ac049c10d788414cc3e3c5c662a2e33680255e31a19eef0d1a613c5d93840300af57df29079309ddbdd089d32363cf710369b235a19f8d4d22c87361a911180df59df18893c688f348b0330d4ac99cb90b73ded0d48fabb6d2d7e9de4d741adc12eee9aebfbdc1d89ff2d1846e8f0c23ca509c4b704ed4d100621c9c46971dae7d991f5c2555c81acc25e29ba13eb00db6f6ef8c2075b4551c7c1ed837c3050e77e1be106cd3c540942e371884cadcd16cbd00d889f79b3c0436a3c759fe2a0c278a293ca7f6d6cf08342492c9530f5b8ef348869993598d1618dd05c77312fa5e673acbbafc81478faf70d800e14d3e898f3e9f0d1f46204407551a318122c31a0cce17e368eb8fc114924ce688be353aaf7b4935216be3a2b8d65cc1b11cc08aa6ee50cb49ab5aedc921db6fd0e0c1f239a83a6c0562c791b863c950b41dae7d991f5c2555c81acc25e29ba13eb00db6f6ef8c2075b4551c7c1ed837c3125822383e908c8e838aee6f3389fca95feaefc6891f555c486dbc2559066693179e7786f0f8cff5c0f66a3c256cabb41a133cce5061e2645ff0fc826eddccac24f7674857649c3c3a71d9984a7bcc3012c36603f69cc787bb01ba7316014d992c0a90a7ab6c93ce245284278da9a6310a277b1a8e2ff203a373df9a0c8960852cd0bc7bb59d6b333b0cb038150054ba7d4aadbdaa9f841a2f207a3669a77fc22026e9a1871239fddfb9c8a1ba46fb3955edbbcd86ba01c83a473db0c4ef6dd71b64034b26e67c662e646c1a1fa9676a9b10673e863e69dedee732d28fb8d6780743ac63c180d4fc05ee254fe70efa699efe3ecaed1cbeafe9ef95b97c5b66ca2026e9a1871239fddfb9c8a1ba46fb3955edbbcd86ba01c83a473db0c4ef6dd70d6952d24b6451fdf162c0ab6bd5c96fd34fb6757680c26b54e86a51c14d86a6265ed71fcf5edff698bbe4c8fe3e14c164f3a42551f339ea276b80e9f8175aa505e39b7b9527cfcb3fcf73d9491db5b16755fd87590699c7427988afe3aa6ac227e513f5d6254f9dd0778c26177982251d32f636a2350b210e2ca33d0ef212d5', 'transcript_type': 'EVM'}\n", - "Time gen prf: 2.5115292072296143 seconds\n" + "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', '5203000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x28b589c2ea61f1d4d2d8fe632d2dd34fe1505b3f2237a4144303c1edd0225623299447c88c565ae9d2eb262d5544e772f1d8d03a5de6dabbcb060142efa733d51d342645d07d2012ae521ef4dd3750fee4353cc003d22d363357becdb322cbeb05b2c7470c2d2af165e46875c16a0101f4be0a4ce6588ca73261b454dedb7afb1a6cfd8207f83e66839b53b1e6257b8f28e47d4bb0e4ba0f2e0f0f8189f810592f39e6993b7e0fdf7553e02150bb33457aece1d10fcc9636eeeec8b5e0d601b314ccc110392d1f6df2944600a95c3e67407bcb893f531839e83cf2768b7d273018b696d85a7f081a46e1abcd24b18fa83d11f61fbb92f6ddbc0d430f8488818a2cddf860cf257c6f77044bfc4ce01a312d8e49db3965bab218c0b20cab30e2e6270755bc25a5f8da66b434fff54f842ff14a1e91ddbb3e280f61788e3e03d8652bc6e5ccda14d0848d29f3041dcd8b4337f274818b7ee306c18a9f6254cc30571ab629e803ed4196f7ffca74f01db00feaf6d240fdd3c61a0b8416f9ccc431bd18fc7d77960c690a00bdf75d3c0f33e0af0a25a5bcc4ad381319650f6163d5551e569dcc693908fe0b99a00469058352347860dda11bc8ce1e122382436eae44304492c6345df55c48ad02e100f5f007971e4535467365f61906a2cb347e97090559fc4ad3e63786151e7852fe066ac8f9a3579259c2dd59ad4bd55af3cf70e4286fc16d6b9a45fff4c7eaad84acf269765da0f992952f7db36fda9eebe5a4aa217b59b5e534f160dca1685bca77fb7a9b9302d791ff99e5beac0045d8713b372283addeb235f01aaac29043ca4df8633ccbf2939a9d9564e95f7a5a22a0c3c103fc09c52659cb83509a7609faa083b242f30b9b976949bb46292eba19aacedf105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf72ab633620a5d4d6294999afb506eb6ca2bc6d795543227ece29addb787ea4f6b13b5c76e46420f4f32b202b4b850c3b03f61930ce77ad2b37d33ffea456922dd23648a446dfb582ce2bb057cf9b74d29d8a639d8a4fefcd549fcdf1646e14a761bba9b40d454de68fe89c7302572f24d447b065dbcd30849715bef3a63d522772955882248dfdf8582188055c89d887d8edd98b4f2dc3b3d86e7e063c912f2c315e5ce320007f82bdc7ebe84b498513476fa56af5ec852e8f27fa8e88f07d7631bd8aa0828bbaefb18509f8e41d096b503873171a8e0fa7027bdd84e8797b58c2e3528d372a7118e343705a0d2bc63a3522ca489a5b4959c8b0d543d924cce0403ec1692da8d7c90d7ed81855933ff2597c88ffa85d937b610610ebeaa1c2e52033109f1ad391fff79c87c41d0e1c4aeb38c24c7d27fed2dfed67bc6c04e530c2a3c7f9f2c38e70109f65392aeccaf4277ec77529989e17b1834e6e2eeaf497d0335575a63a286cb9e61e15d9c620d7650143976ec6a4ddfb1879705381bc87f04a4861a348577de33b8444cc2ddb2f221fefa59cb1f1f291970df1436efcf5a23b1c53fd9891d2dbe22126867235869bf1ac7591f3ce90b36f5c1fdaa2f382e17563c57e73735342a75c414b87032fdeba6d7465f1b0e3ad10bcf8df08a03ab278ea99a7bc21b577213eb6cf98610242dc18799572d726616a1e5d48f70725726f114eb55bb5c0323d70f841541229cabfb0bffc2beea8a7ef5b8607dcda1b010bd17f0aee27954e8109ff874b5411011303f75cadd367d13c810d3977d42a20262ce26cb3d4e1bfe8ec1bdd44464884d8ba9e0f12f082a512285db7cd93a081997e1c5a4afcd265b824f93a9150e043f2583cb45f09b160851c788b97fa4191d02b9936fb8064819b69af8fac6b4dbe2c761e1c0adaf0cc94330ca1b9d6b5d091c5b2080760cca70a078622a196df54671e0651c133c14cd1ef0569ae740432735ee80c9dc2178669010bf519e27edbdbdc32ea85f68ddcdcbaedc1166890a2afae0ad641d42becb09ef2e84fb0cac30396fcffafad07181ac0f6140c2db4c15a18b242eae9464c9b0e479e713fbb253ca60770fbfe1111ce5f4bf7ace86cc0c4a7ebf238a0e9dd5f353abf57a2cf9927e88d7b0531c2adc1d76a8865411af1d4ee67360480492240f8cd999a30826e9ea81f1eee3556c25896fe4b3c66d3e00180ccc5710aa48fa916c38950de16ec9a1bababe017234ef9c32f0bddd224f27771064165c6f991b531114d58ac0e4d92b3e4cd443beb24b499a7167891d3a2561122731b015f370f81b3e33ce088e53c36c6cfae0afc76c58f0a45f4b832429d3ba0125cad4f4a7959ded34d1f0d70e090c51af06058667a2714a2153d8781e1c5a8eff8cd850adb7448e8731004565c7634ee9173ad82ba19a98f6815e251e07deab41656955f84d68373ae31e26d379bf1afb810bbb069779569ed6661a1f4db1dcdff70745cf52fe3149de92f7ca1507a3e69ddb618e967c242964c4ca2954cae9cad75d2fa19b922fbd9fd7546c304f572b27b5833b34498877bc124d17984031f782c34f9e461b93cb6c2428f2019f6c54615ffa46c282580e59c1ac07d19fafe6b935d5b2a38632513ca742587f3036a8fb868d26dc642ee9c4dd7a27270a328fe0e64073c3a045b1944c8cf93c98bad0382f65d6119e3279225e0b2b56492f1faac12907e089e62b29f549c007c1b864add98917634f4ff6b5e9f5085470ad8d51e2ee273a53f1ee570a7b5b11643438a2ede7bfa54938b2a7fa5d19dcc1417944d3c84a139cf53fa83e0f22a374720cee5b0944fc143e698fbcbb21a0b58f72f0275576990f5a69b3a91415d948c23fa895e3aacc3f51f8e7f7e52088a4e6cf51fc346a95c0c7df2073f1ec8316a7cf096244018c32ed3d45a1532267f3e7a03d873d9e08d8f8ce0635a702fcfadb10ea11444a6889d2461a59b21392da7179db4614e17184bbb5db7c535101c7ad0116acebf9adba02a1874b2f127d439c0aee5b8eb343de6fad9b52b1d93c7087602f6a28159abc73f8da98151e7aa7f456f6f9bd12d19a0e7181a9c23ff37220017e05b01e5ac64e6df5f67d0f0674d748623658131e665a6eb8d28b11624be523775e8304463b87b0c7a2df1bb4c4dabe96bf066395f328099f8b5efe1fe2b0a4308d225da16ea72b2c20df23b748448fe47a7b3a2c22ddf47ee1e5ab145393a5cabc5e4165d75c0e3e9bc60c3f4b621a29b302ad2c18d4e2c273635827e848ea1ec46acc28aacb0e1dffe31be3a6955389f7da6024db3eecd1e558d16c6ff32a5861b68b4d2f1deb1954851ee9b203fe36d392861a658c4f8d6c483ff47cabb6ff43991b0c5b61a2e7dbe600388dcb0db1f95dde066d2dc27a74abc91624ce4e0b76653be5f3003353bcfe0fd3173ebaebf8d3066b5157cae9723534685c7fcaca174ee71ddae26605e73906f5cf05a74ca0fff81c6e9dbaa06252f3a02180a64d078ab629aab0b3bf8ede06bed8467b06ed46fad5980cdc1167f3da6449547a100ff8ec54995486a9ef840ee255633a349994b440e093d9513bf4027e53cd23d98f7ed190f80dc98d46c128c295992fe65cca96ca4b1d29c61cb48faa35797aa3548345ff3fea747a79b315f559c964e59ddaab5d4f769db16afb209eb162b1c31e6ab54722dd4b1be618235040e7504e40c120024bfb44c0f135e2a95e3b7ae3f9484eee2012677052c92b5c19e592f95c3994c4607c726d77dc922f5c21685a00307e76cdbca5c9becb069b7e2a0e7caf8e94d584a0f9baf95c4634c9be7df832687a85ebd5f09ab89507a79afb564d96cdcd309b4387ea7e29754a7e70f1243c2e8fa948c85b862f930518979422c0b6f8fdbfc77fe6ba8526b52270fffa956f60195806c92302ff620dd2c512eebd2aaf62f3fe7485f344b158c8726443c930b717a76fd8e43b766900000000000000000000000000000000000000000000000000000000000000002642a262a119ed4b13b418c21d105bbab7a75c0f0093b0d55039a0e44dcac46514a92a6feb5ab6d21fb4b59bdd94129b409cdf3c81e41e32270b839df8f63e5b00000000000000000000000000000000000000000000000000000000000000000d15b8c7bcd5f707e8c4570bbac4085bcdd67b56cba6fab1e989376d2feee4861135f7d317b97643e5a845dace6213f8b9e16b553d7f8ea1ae36cd72dbc897a12ddefbd44f1edd2969e6c5f66e22dab88240940a676a7615adccf12c7d8c62a700000000000000000000000000000000000000000000000000000000000000002a6088adceee6190e6068caa6b4cf86e78261a1f2de0a973b2a41976fa6c4a4214a92a6feb5ab6d21fb4b59bdd94129b409cdf3c81e41e32270b839df8f63e5b0000000000000000000000000000000000000000000000000000000000000000120b1001ee779c7b5936340d6338ab69ba51b1d49cacb1291aa747f2ecdbdeb4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006195366276b7b3ec30a09f6cc958cb5de3831d56549eb36dc440556c043dc0b13641da3a9be6bda841d02d34f48c7effc69ca3aedcca1d9558ec08cdeb1d074017f92f901f92e0533b0c2224c2ef5db259837ca508b8d0bce60f0b77f9de0500000000000000000000000000000000000000000000000000000000000000000296f86cab71bcfe078f25df428098accf9c13334aa2354c0193ca1ea53f451dc0f053be76630ce9c28215efe2320aa808ab2368bbaedb40e242411ef21d4979c2cc921a1b4ec136853d50e26189453452ee282082ccfc881d4a318b62ae1b5312dd7b5a39789b1b6edb6f809d32769704d62887e6fc9528806ce466b111264c423140c02dc0d385e36558df9ce8e38ded7e7537956ecd75471ebbf433c3b8386294433d3835851b98c26b9f54f8f2d1d342445b7d0aafc2369f1b2777645dbae0231a66fa5324532f6c3b2477cb03460de454ded16887fb72ad7ec2c62292f2a1d80d27a8935658852c43f435a7773a36aa8b280728ba52de9f78f9745bff27b299dd2749beb0576b76a5e2d2044bc017a6ddc1a28e09a6c4349b854b1aeb5d224fbab4ae162a89ad170c55123c7af71e1d26af4b510b8c3f2ccdba46e10b01b17c00f16637108f932dfe883992a60a4c51136e8c605025bfc854b23863b64861d7accdc7a47c958434d165efc8dbf071977fcab73b3f1fdd4bc48e27a9b29730b5eaebf9a64cc9cc72762a6c13a76b3f93f7f6196d68a6488570349ec9a781a0b04c6b732f65593141d42de1a4f1b57e0e6569d524898ecfdf137ab2f6dee9c15238c9dc1a892a0251a47e9558d8b00c96e9b4d5bed2be2019a7bd59f2e169121a25aa5b985bad7ddac754987f92354cdfa3f5eb79d665b3d612e8d331e32fe231fbbc09632e565b3d83db7f97145a05ae29a3ad9d1c3e48598283be6844ef30a93f34c4be2c768c2e64fe7d63bf45a75927a1e7e8e1e8bea0f506f9fc85c6b159861509b9466ac3dee2e1012e0f9eec020f004c8c2bac65d6141242fb8be61121a21304587af62f046d1f38e67d7ff354a8b3aef0153bb55a371b56cda544a2329abbdebe2afadb57eb8ee0c2c07250d8e1818ef49dd2041499f150669ace007f59f4ba7690674b7c075949ec0d0518841b0cd1e3f1e2a71121de52078fecd0168f1012378315f2c7cd6633e3c8f3f20400ba5c6f42f1d5954a5188b7e5b2116961ed19b08e737c5607e005d35fbb13b1a58194738aa1f4ebf09b7821b0211256c89f851609551922c0f4d20900dd2a1fdd81ad6e5a42376d0750ea5d6904b036ec6c6d68d868125609d8ed2f311eeed8fcf252225ca23c8293632cad860fa03d36323416125507e8934fbfcd70763ff0f6b2cd34ed1a854eb582af140dff003b23ab647f772da01e085d3feef8b63f93f27913804237a7b71a38b7b922c9a168910a04276bf5e1490a68417b11d1c37fcc4b71f9e5324147a1885044d5d990efad415da78d2ba5e8f20be3143f1b1eb88adbba8cc13e30f3c40f7882fb5e417b64dfe868a74d03a41a22966ab27fbc89f17c5599895c7a8611ec783d15f9a2ffe96e7e6a1736e4cef98d38d552a72b5234bb1778b80bb78e3b3aaa5cf1eff0cf53d3c21059b774260941833e9d0b54e2de73206b1db9d81e9f6fba671510e0ec423bbdce4d368c262af2b14b37bc3e83d6f59da395c3ee7c8c982d95e532000644991cd123ad815fffda036434b276b7e78e0de9ea739e6e9778ccaa7b05100f248f6fb6888edc27cd4f906a9b34720c05014c9aa4377470babfff71e42572f00edbdfd4cd48a5e6a89d0f548b7fb8f22f9c745f59455cb61d05cae9ac4322c51e1a37144d221f753d21ecb42620edb17a53332d4cc88ab8e14c8cf1a4eae16c26648e6a7d48164af93bbc033dcbaa61c466977d3db2318a50b21fdfaf9a222754041e9fec97a53e3be536682413241b67821552807dad7608252fb3ecd4a00a900b775820fdbc58f9adf20d28beb5757a945dcfe74a1d30938f524ab195f226f7fe4e1a1f054fe4eb59cb02ede59d235a755ae446861ff46f5c61e5b85b61ccb5561667c16f5e1f42a639b3b9316bccbdbd59869061b95d4beedc15153df17ef07fd77f78b629235af6e344a2da2c1a27f0c2025880174eb907c428a50d11e43a5350fb662408f1b1df27df79e0b5b601fff4c994848dd3ba713d11fae952b020d7db777fe5d7ce677442e07a9e814a7c1566f56a7baa486c614d3aefb5509896f0c7ddd03a1ee6b8cf7880000c78082872e48e2c755ad15297f579c4486', 'transcript_type': 'EVM'}\n", + "Time gen prf: 2.364812135696411 seconds\n" ] } ], @@ -237,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -253,6 +204,13 @@ "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", "print(\"Verifier gets result:\", res)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/examples/where+geomean/where+geomean.ipynb b/examples/where+geomean/where+geomean.ipynb deleted file mode 100644 index 1fc6ffb..0000000 --- a/examples/where+geomean/where+geomean.ipynb +++ /dev/null @@ -1,321 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "\n", - "create_dummy(data_path, dummy_data_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [8]\n", - "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/ops.py:102: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " return torch.abs((torch.log(self.result)*size)-torch.sum(torch.log(x)))<=size*torch.log(torch.tensor(1+self.error))\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(double) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", - " _C._check_onnx_proto(proto)\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (x > 20)\n", - " filtered_x = torch.where(filter, x, 1.0)\n", - " return s.geometric_mean(filtered_x)\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [8]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[-2560,45056],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":3310,\"total_const_size\":305,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Ln\":{\"scale\":256.0}},{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 2\n", - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 13.265241861343384 seconds\n", - "=======================================\n", - "Theory output: tensor(48.1276, dtype=torch.float64)\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 45.703125\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[11768814371718170976, 435173728250646979, 519717007263840094, 1741290966923863957], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [14342780245625474618, 733556062893518525, 16161524522791859482, 2634936898687523127]]], 'proof': '2dbd7a643e148997ba065e1bf38df01ad8bd5e91213501c3134a7a6039fd39601224f125455f2a971aa96e8f3214517f3468643ca72b11c7812ce832220b59fc302f5eea0f1d58d6a12af654da221470714662bfc9a6979d19865336afd9c6610489b66559a0227c9e16e840ab8b667e32148abf691b8b54e2d21f5bc3d15c4e1eaa3ab74d4aaf5ca556487d5e3ce0e182f129d8e288c11f832abf6906833e011e6139dc4739de6f491194eb3b1d5dbc822a8b5daeb2b78c28223ade9c04323d24f185c53757b4037163ca59472d4efb0d3bfe139d704effcd948ee40c987dbc081b8f195ff532650cb1c171938681ac3e21d4112d4b6562d046edaf0d383b3324713121c201e8a6ff15461c4cc8212ff8b5acb0d7a431c0e6cfa3c1c7e663bc1f68afca3628af06cc6af7d023d1fa06042fe22ee50071718a73feeb5efaf42d1b4bf261134887ae0c6b5fa95a4c4b799b5601c7cccb62a5a1a0025e58b09a942d456fa80057cc993094b72238dfc2ffaee700eebea6afd04d198a8876fd5dd20bdd2b779e595b6d3b764044046caaba9e44f066ed4735e79d8fbdc7384623e517edcba06f260f60d7cee137f02644a0363b8d896b5f6ae584c1ade28c4a15ed1848f6d357c8e87be58ebcbeb04682ea3c840961954b8fe567e4eff41afba8d42cea8a48d78ceb3b09954ff7cc2d4258ac76587e65228964bc4586d4fe99cb7a146330473fb73623476587f3e9df0f6cda64ccffde7c660b45feb851cd15b9a21475a27b3bbc753ba8de9bea418893e0699c17018ef80b7a31ffc0f764cb09d210923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec410a61791b0d34c822d1a9569cf3827deea2add7cc2666eba595b01ff172e0907728adb306eb689d6e9e2300d70f643d05a37e912b0d57daa30e63f08b8bb1e1de2535a1d8a80651ea25eac10451e2b22a72596424fef429d3cd5beb91db46f6f10103b7dce3ec0a83941650741bc21353ec16c14a6e9e889b2c864df6092765930f40f0f94ef1383319c5171a5c834d69ad7f55892cae4e14c6009a954e63ffee17368cbde248b16702b1de2375c9652fc65f27b37782bf0175146d0afc539def16728c6f2f061bdc6af4db40262cf519a5c945d044953973d5c662a59910bb5b03777ac8432a220878ffc36e020d0534e0294f7c6613595dcbb261d83ccfc68625be5c6cb482b13d1b344316538a3153372733bec25d2de3fce1c0e63e59ccf80bbb9f9a57ba7833f32520448c8b2b9568c5e33743eb8fbd27d098b9f52eaf242e4d12cfeda9f57431f38c9175c85f0e22f27c7061bf617e2bfe8c05b8416949025384f4f0eaa01474ed728bfcff94404af8e330ac2d8717de58f2a806078bd9148e58643be6ceff6237cdd5f46e8e6f9acc1757a2615341504c973054fd6aaf13bcf57a6cb067c214118b8d7f01f1686a29ceda0ea0923d56e629481977dee11b99f289774e38fb9162406eb00a7a09fc2d8a86c91b009160a780c6515346d9019950fbb923a0024a7232140b2ad920c61a304296a879d6f5383077dd2d0779130a2c7ef9972c71263a5012d3319f1c28677409a06c2ae7dcd3a2495da9951f20d496993b9a3473bc3a9aa5ad1156959b19ae362062857dfa664803bfd5033c0761cb4dac452cf8049a0875773b7a0b142ef697c43e7c59c0c83cd9a2907bd2219b4aabec0b165da03ee9456837afa79931499adb5d1a964bf20a1dc4bf693f2575c3bc2c637e041c8bd9522a12c33babeac7d622f1f03b151fb3d02dcfa30519c3ab4911e9d44ea75fb335c15c7c92bc7e0ad3a0226490a6721f758fc3cf750f03bdd8a667c1eb62207e1816523fe2c60bfebaebce8ec4abad1732859b722218671f050d4afd0a223d88149f11f8f98d524b4220d1f9ecce0fed8dc0f778e1205dfa19141d148ffde7bbb6892d69d7f6cd652b79d99023f857fba7d1d85efd28646ca0d8e3b7cc9e9f104f3833295ac60476269c4c56f2112561e41f9c47560734950085808740a48394d1048e7b9ce1bd6d2e2c84c4d79006383d33a91aab128b70cb9cd25fbbdcad1093c3d15243ba2c0559c6539359916880590ed675c612660c1b86c3c5df7df2edff9ba7966dad1b9851c4471c9994b878f289c8d5a515d269abc2fd6b7f40c3fb83509fd0d0daea3846770539b5bc9f4df055e4a771157883f37695d002b1b8bd2a6ed1086ff137975efc08ddf0d7db964b4e339d8d2d714c8790d09706f7b514f88e41480dd2aee959ba1c3bd7b1d21bf29cf3c296239dcca1e6d1f2db16f8771ce390fc5bd586dd19a9798b3204b59e1656ffefbd012f4234d9d695098a04732d1f392d0f91540220c948db3f39122ed4a4466ed42cc46ca2f7da6d9e7b3e73fe5a2f7d06ec47821fd43e281f2cc084e69c8cb9a814b149fef6ea6dd32b7ed2a9b8df9d047ee9c12f69a30a4c606129dc92677a6a11dad65551f402604bdbd5f3d7ebc2df725a823b2008ec8bc969c3008018434e288be37b88807417bd5dc9d15f5404f52447a6b26f1bfe2ff64041fcdaa7c80018a981e0bd47036ab99bf5f2a34ed9db6f4250a52501d834ad210a26a645e8d4093e27318d1e11da9fa307406307b9c9a8059ab37ccbc74fba5a2c160e51b36a0cb256f1820b99b689d62fedf5ad08832fe034b2f009b5f7737c617959fce2d909427fa6c6d9c6fdb0d2edc8e39c6a4a26751dd9b656e9394ecfa4236b717db322f00df4d625c965d7ed3206bcd3a929e21f2badb19192d0e4081d608783db9510247cab6058258124e0027055f1e7b2e8f328fd01003759b55d9191660ea5e02f220a75302ffcd2c39737083928f4bcaca2f1656ce212fe86f103811125a38b0f87398a4f864baced6d713edff0b3dc4e13a68aa146490f572beed712f4745728d35fe3048a3939452f51b08f46cb7b380c2f4acd318762c1562bfc73213e930508804d499e3d2223a01be415abcf76c1be5594402ebadab7208a3e842ec81c26ac8aead9ef7deafb969aad6f790fe854c29d2f8d5412c5881f78b1bcdd41de23bb4703a226e97545c26753e4b77e7f8716b8e7c2711fd0918863f8ec9d6e582ae9f49b3d3674b8962026a084ec09ba16783c2d964f717781c6e72fc4993d111a9b686e4a72579d109e7cdff281b525d558cc516c8c745cd064c761d0d0de9a22e01835c7cf4e67cdeb2ffe5e0b998207446aec3741a0a08438b1699698a9fd014ed005060e0947b9fb8b2e09f46960a407336fe3d8f8395a85217515b02c7c17324f64dd8e9b21feb4bfac8ac3cd649e02333a5a0500f6c75c1e72df24f25b298c51c3e234e0e9a030489d327a30c098d23fe0dff312dd6f9ca4db95c21a7813978fe7db216738dd44fc18eb4725bed442696b2ae34691d755c1965bcf23f02bf31e3ea6b4df9cac4b01a5c31dd9458837692989cd4f11fbd7de90f48bbcd91ea769039c0a936a6c44f39fc105da6a17711d195a1c66dd6e17c19b74be9333022c37341173dcef59df9dce432add3efeacca23addc77ad486089ced079aa961895f1de0ddb01b04d44d4db253de36e174084292d22d16f35b9006b1c3c61fb113f7dfae56f3da0175f9eb11471e12acecd4949b1fd8cb7b558d20ccd9241f31c726daeb38fe9a25926a41fd8f76a0419bd090c925cb20c0a572673cf158a34000000000000000000000000000000000000000000000000000000000000000013e921aec97c985cdb319f92c33ea8a5a4d86b6b52934b171d08d4d9d9235e9b073e5788f9ba1dd2f2dd7b1758a3f8563a35a4d8460ebc35dcb595b804b95331073e5788f9ba1dd2f2dd7b1758a3f8563a35a4d8460ebc35dcb595b804b953310c49b8d9bfb4e46b8fe9ff649c7c02d0052e2b2ffda7b495025cd1518b8667ee05a65c5d124161c14e56c6faa7446d4a8b5a92ec836a9b6fef39ce7360d70c9c2a7e7c9aedac19de42738b2e1285a6d33610eeda60cf50ae1e0c80220915cc80071e9c304c7bd2e04bd1621f2aa7df055aea5f6d23835ef78a9fcb7f29cb005f0407cc56ded40fcb9630b43f7a7e68d8676754c155b5c209e50b290a87362a0d016e84259ee39f53c9c6c3f95da7805a10468bab640405be19fda369e9d08ae1285f8a6f0854a9ff90b29ff44613cf5bc71b16aa3735bd54d060e71c6e9ce5e72e94cc7eb314aac2d62a92780e6fc6cc2892801ab6453a38f383bf0a6bfd1be906af2278d739eb7a4a55a2f8e77aa429695d35408cd0453f08ebae2cad07a203275800085034bba60de8d5777843b0cb7db44f37f6405c1800823970331404cd2c4855d519eb2fdd0f34eefe82dc8041f8f51859638cefa4f13373c16bf6279113bd50525b750be8ce42ce2ec752704c31c12e980ee92bd7f45e9457aae7f999269264ff1d67bb55dfb600030dca035a369828d0eb35e679b16a4ecfd8abd39a285c9e7e82ffcd8d71316a1bdb4a89a27769108416b88243c5e2d4606ebdebbd17c9b3e0ab761d11faee8f85f1e1e5ddbf1390aed2c1ff2467078e505cd3cf092e1cf10aac527be03ed5ede5060da34e6b6a8897f68e4ca1b835b51f6f8d09f52068dda5a2210001292035aa069ba302812a0c4b84bce59381cd64f00cae21082c99d34eaf369bdd572c89bac39eb31df2f08f65a1ca38700bf22125455946e328d0b3593fdaf347a03496d59fcabfeb1bd38cccca548de9ff90d0487da9d06e210026ba9b5e92a7e3dedc9d1c51d9b23b84b2a1f04fea2f48c1194ec3c15ad403086073df1278c914628400d3c440d211f534328a1a7593a357ae41627e22302ecdadc02717726884c8c07ad39e6c0aa2cbf1de3f7345eafd51da7e6f9df0f301a0761a54421ea4e05681cdfcde16be8bab170491dc1fce8f8835421626446525f66395c1affc3b671a88460115c724956a3257b8734ef2daf99afb2e278edc29fc8b1afc7808a18d383fe4b64c302922a0259a966254988a4034daef5c7f8506b7d8e40cee9276dd5f3f98fa679abfb7f186ac6b653aa57614f547652121cf0c2ac475391685f86a0c51b36619ff86a70e6c9a39f06c118e6b8a44a2dc778f05e5889211035aac74658a60db766ea3f0839d5387e867fc82bf3887628b4d790d49a22d534766acb907b263c10dc4f833efbc5979579b2c9204619afa1233cb1fc7c616aedf62a35e3574d7f48cfbc4e7364b7d4cc4ebaadcc895998d0038fe238a1103039d8ce0306a3c0a01bc30b08e13307838bb3a8a887f0334209e40a518685d23e4908717f8f1552d2d8c363a25154e84601dce68bd1e854619bc60360bc125b209a722020d63ff858a07be9c9f88b95ec097f3fccb75381ee386194902240e0ca2a2765ab4ae92d18b959521e042f320931c5d2d694b99582215e200013012467089dd21f4f7e3c9937064273e5335865b5ab46590ab7cb76143f02e1cba04544a7b92cc1815f4fa922a9a47785b9a2a2014a1a15b7f8c1f7ddbc99b20b27a8fcd2d4db0d7c915b09953f8b91f41704bda56624b714fbaa73e82b03a2c274d8106e63e11a838d12430a26adad42a561166f90945e29b896f311cbcad234282ecc0461ecb91aad208d98a5c5642f3de738d5e7b82b122f55360a05fd22030fb4cae3ef3200e58d5192a42d8c42001a5c1d9463c64685c313534948f8d172c7034225dac88507a8b818162a7e1bc7fc8fcf73d5710ac4699139fba604d2d0a697edb5d94c6263f29edea4c4e036f1101a82cb79e320453cfa372eb61fa2e6d87d9d3b371974ed8fcb94e6b7a3b2fdcac30bc46a50d8e93687cb23bc6a5287efba3d11dd66174a480be56eaec7601595261aeda952469d95c4d7b1be6591efd9b6ffd241ae9ff4bfbc473a59f8be1cb2fe87618cd8f73718eb1339d42d90d2c14a70f177718295c655410b2558d280bf70ecb6b51104d9921ad842e8aa60206fd0d0c47a55da52e1f32b739666731bb3fca2a5364ef713e50607b39eaec2a8ef07621ad910afc0a9ad0189abcfc67c874edaa408099aa340249ae1024f31ffaef9296f736df9c6b0a9b703a0450578b0b231d7f4f7748c2584cfddc0ebf11076963bc0ae59fd84c772eb8a20a3d3a2e84e8c3c5d52bd94abe2bdcc8f6a72a264a832ef24945f5a901cc998033382bafe76814bc386e23c2ea3af6f8d6801a1c0beeb897ca69508e097e0ed52a4592b1058b2ba4c842ec3a78da78096a5710e56ab9d7bd2b51ecc0f1586ffc9609ca5db65d2b6d769e52dafe78c2f58f03', 'transcript_type': 'EVM'}\n", - "Time gen prf: 19.63252091407776 seconds\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "print(\"Theory output: \", theory_output)\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Verifier gets result: 45.703125\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where+mean/where+mean.ipynb b/examples/where+mean/where+mean.ipynb deleted file mode 100644 index b915c0c..0000000 --- a/examples/where+mean/where+mean.ipynb +++ /dev/null @@ -1,312 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "\n", - "create_dummy(data_path, dummy_data_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [2]\n", - "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(double) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", - " _C._check_onnx_proto(proto)\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (x > 20)\n", - " filtered_x = torch.where(filter, x, 0.0)\n", - " return s.mean(filtered_x)\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns,sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1190,544],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":3010,\"total_const_size\":305,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 3.5796821117401123 seconds\n", - "=======================================\n", - "Theory output: tensor(50.2196, dtype=torch.float64)\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 49.5\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[12572659313263335624, 14443766455855958404, 432930639589567449, 1881177029071802301], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [6835514210936421353, 10643412839807884771, 3437058592396516096, 1568141251780932959]]], 'proof': '18c67ff3496cac99dae0deb9283889b8b335cb4ba5afbd760b111be51523bb66009257e5a3bef69c4678a8957ee4b80470ca579af9197992b817b340718adfb7227fd59a67f43441fac368b71adb75e6a94248f1a570f454aded83a9182f82431d7a704a57363be09aa27cd30c4484b8b634233940a6519b15b2000c91a19cfb021b83a591c8e2019c35ae8bd06e2c4123a5fac58c318df3eb6cf06f0f1f298d03a3d09232f52ba57c9d9b9c9e4a6a7a72562078968f7ce6e8d37a5770c8467d281e25f80d6ae14fe11da4d9b80e66b0764eb16e5fa02cf48dca24b80a4c00fd1fcba8813444c57916b0a16ec7a3b0d1e1acfbc8a0f89b78ec468a8225d8bd4218d39e642e81a4018a6d9cf2025d9627f3b43a5d23ea69813365b27b77a126f91f59370d37f2011682f2f7b8d188cbb779263d8b81fbb486d45d98272ecc01f627f511e707f6327a2df923c24fcc83a3cbc4bcaa22681a6548843b03324feb932dfea9ab8b66278924a947ebcb75214e5c0e074326203de917392741dcf388932f68f3d7e505c2994b921d098ca7517b6ad8efb2ec30d79ffcac24ca633cdc410442c0511aa081a14c049c302753d6ec6c5bbb0952323824f82f077f9c2506220006c2ae4b15fa24592a97d9190af563129c82387e2d00ebab09f503cc05958c264bc136d450210a8552fa44b3e0967dabbe98eb2c3224815a235c4c62f77742059e7bb47d48967d8ceff8367a14d478203322dd7dadc6a1b40b710da9101f8a15dea8f2288d868dcda3fa3ba2351e4100809cf9e0f2ac070351b6a6a126e100105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf72202bb41bae8d8d482572b3a89ade4be7c8b8eb83774e0aee9624266b52e0a132beff404735f4751270ea34bedf415c274d71b01b7b27dea9a64cc8a32bdcbaa0364f4b14ca0a980570a942145c921279872ecdfb0384bded3c023ac7f33bb4404c6140feff5153c09abd5f62620caa320c7eb5c2d9898ea6fbf0dbcd00a12691a69f9c61d90a44d07e8fd0bec82c5fb3e9c12fb3170c2629bae3a1690ed1bb82915b81234d649d99afdfbac21081c0d2e45d24ade403c82c1d8ed63ec5dc57217e995885955e53f52d09e00fbdf0562f2cc75a6efda863a6976065a52a1efbd07db571fb43cffd6164786b2bd7290553a3978845d9eade7d0a3b7955dfc16050f2829521f59a349bc7fbea882e9f761ecab0c1cb23d707b7c692b73add91b7a24e523764b5d9fd023942f106f3ca71cc75a372848fbfe82d559aa1ed107f1850846ad913f6a693c8fc735055d909e4de41e1435907ac21160e765eb8e19be5a12501cc2883b5774b90a82a2e2092efd5d6927584c2579d98d36c843f24c4df90ec6856e9a3d2919b25bd9b39f22a0fe78fe6e862f55566102a2e1c122704d352af183f33cbf0d09235a1d60082591d52339f26ce79fac513263e8511fcbbe06128d6db959db88d1445102432fd218cbab80ac48671a71388dc99f9bc9381673016eca1637cc8e824b25942c821a9ec7460ea8ebca95c67e7aa51451cff53c0d184a422fc0a0aba50d92c70aaf3e76fc1b08641ed214947fd134a726f74951562c019b30561d5e8df87b5dd9fe11c41e51c2f84660fa0cbd6d9cd6be51492824243183ea890c2f207b478c597342591dcc5c3f4e6c37053ec5ee9ec38b3b9520282b89ffd2bef02523771d0e041e084528223aca33c5731a47714b503fb81c0005e26c1ae3be5f9424bd875046a7aae8c28c8aabe77185d39df9f5aa79dad279302b790013c61a8711c73ae2796f7676d088a23d1c9d111bca3d6a14ed9acc8b238f878105daa174331c6e656cbbb01570c55944387b040d4ff42b9cbf520aec0b7e7ffba57188ac6f008291bc316ec39f475a798300346bc5aa687a325bb9fd2d37f903a6c8d1b23fc200f5fa92edd4665834c324d1b7a033a07d4571874fed052b9bcdf65749701df8343c90081aa9dcad0e693f26827ce749b2f883f8ddf12704cbef5ea62ade8a629362863b9b8144c6b6a730e88b49d7a2f8130401802f2cf46a6e98425e6473a52a2d5b78f715633f55c9a4c285ccf833ef262380796b0ced7e8c1a3b14c501126bb083290e80816debd36813503d4dafbe63e0f666d12fbf0803f971df28587a1ca6bc0803e0731113de9d31e70440afe735199651cb0e2a0aba984eb8d78153a88071e0ffab13633bccbb3626b733dd673fda01fc4e15450abaec943f433aaa56703a758a1cf4b67608885b5ece70450beed738c1f00c7b1c411dfa259d409319a1133cfaa6461a318e95ed399a5231cf37aa3ea0ff1c43aed524284380665507caa6b0f4a3404d2ad651adcb80305cf3030d48b04b2ead5350805ded4cbc2ee41cdca370125aa3986a98b658b7cb22159c4b628f59178728391d42ffab871aa821309a8ca7747fb1b6615be35404248a2fa20828720f3e0d4f73f249df2e212f71485b7cb9e29f126776fe3b5b3e99ceec566b6b13114e0ca621e26b5d4e1407940f3a2050c92a1135b8801144f01be0e16c4b87261e4108afcd216cd4bfe71aba451007d4d50287c92dbc6486151d211849f2dc5316ebeb2ae1e1f2f22468a226095477b9a1b0c7e48b6018d975a6d8d1cb408ae105ab2f21d154320a280213d91c2ff1ab633423d53bb5f4ec2b400191a010ba8830429a36b911153393e93cbca4c630e0771aa796067dd4de48818db6a258e8740b0a6b169a5f797e4a16e09adf2f4520191b945b8a4f6a4feac462ed072084c728a340b063830ef62626f4f1d666549bca78c62dfff8b55a0cbc3889f6dc48991e09e6f508fef8cebe3fbc41ecfbe07cc5c6d975843ac4bc968906a9812194da1235a4fa11a8600b3d8958acfa2217ce7b1d05cd8c695d1389fea7604eb869550789f41950366a8d230c37c5f1a161b72daa7c7630bb3ed0e8f4f3b9a8c478a714bbe6912be4cad36cfb59b5e6fc6eaedb8d2d1be1c27e5e43bf7e51ecb2d4100f2631d136b236ddfd24add0aad9c9c7689e299d2dbaa749109a035c5e44b4f0267cc275dd1901f966b6ea6ebd2981dcdc249ff8692a14fd5da9d8385f3ab6cd081a188e0523c1d07113467a4860c3863ca495a4eed46d26b8067b3aafe38fa40351ea45dbcb51ee1a85a86a633ddca562a45f6822976bb54613e4cb640c0af0133a3fd1fcae9c6d75d0276e5a746eb2fb9740386a149d7c6cf91f6ff398ef611af68fd84a97e647ace7e9d424ce4241664d55f3e00566b98eb03972d64b3b870000000000000000000000000000000000000000000000000000000000000000291dae366be62fc37ae1a5ee4df11ec84d48e9491829f18f6f6dcdd049963e231e37a67b52359637b6d1b971cbdd37c549b43a07a4a320199f677d582cb3ce180c69209e47d988bad91ccbb6da52546eb1fa07b5c9619bdae898ca2e1dbb770e1736b10744f9e17610d21afc943a64f6af4436cf75a9f9cb59181cc50142bad40fa69740bff7bfb73f83d7676f8e219f8ae427e25d49d992d5dc038c5f35f70706af9296a9d4f13285211b6678aaf162407d5c3073e7c5ae06d3312c67aaa8f3221b9cc121931d2a5f266eb18a52947f0d7714caab69ee2421f28887b5eb5dc92f2e127f599cec388b06096b968ee392f749e5351dca1b1c182901a51a4725f708d9938f0d0e5938e79107aff38b36eefd13e479e1d07bea4c6035cd12d16c6a212a8e29ca7fa8a0c98c02ee1fab9b8dd05541d47aeb3cce3690d09f1dc6caa7166c59eb9600ba00b66955f1d239358443456ba63513583cbef7c7e4a2b620631c0aed88e33a34b3a0ccd9d095b7cad173f250a9b2cf3055447375ab5ebb44b30f471a2ebbb0348e2413bcf61d8b94079e4796b6e44df3fb357a5bc7917a5fa52d5efaa5a17dfb8a70ada57ea2b729bfda21f0e6458e7cc435ef0fdd847f46c3199642cf79f7d1532ee46b802c0223fa176f707961adbc5ed2fd58e8dc0b4e162e508f4f812fbf08a574ec796b896e6c349d4e73ad2d8dcf86d8fdb1164da7dd2deeb3b9568a7199275ce1de71573aadf8d0364725db6a151643d0e52b686f2b04e697fb129a793780646db6f9c5910d6160fde773a2ff1ef22e37521da221371e406b401d564f73f958a6dc208e3cf3c6836d0461200c7b64fa132009362f8b17e4c6f2b36f9949c80ecb961131759674e77039f6ae5cd4138ae49f3518b1151f6f89c70abf8ee53cd33b89b7b1a00bbdc15b7f0f107945206bb369c1856d0506df58396b7a637b1efa3beb8ace6c23fa17006fdad8fdec63dffe1441250c030940a8342837763380837a431636d21f597cdb5ea387ca77ccfb71a2a76e8e2928ede369258cc40ffa1e53273a0a618e2498eb45bbc2eb34d2d7744c843511200ca350406ed8f5abcc47cc822d50f79dafb0edb1032fabb1239a809e36aea6882274b12915f9c6d401970f275b154a73d64fc47e60c3d665b9f721a9ddc9852f1e5ea0870e7968e874886617215e1c85c33a83901d167369515367b9e1a6229b3030b9ab5ddab2c39fda936a35d7b9c3b154d345c8eb21de6da466740eefb77b0cb5f1a38dc410c16ffce61d1549602f8d28a9e273b01cfbacdcec371ddf027c01f4045ff2e8ec07805173955d79572411e1522bd405cff12cbcde64447153af2391cd6dc2da5bbd3965cd5c923560031e10af177a594fb077d76361f34199cb0a7b36bbcfd792407cd2a501e90280935ec25ba737aaf22641a96dd6b6688059204ee82b0727cdcc3dc75f6f3aa8b873c53b916b84d3a8b78847220af98dea541c9a89b9fc88d81a1bb7dedd1241b4b876ca7a7bb8a2750841d083bbaf400c972227db963585605cc68f5edde2827f4b5930e3304d06c47eb2a8a1ce10b58726147545d735e70dca03bc314ab6840854d1b4b9f0b16aae1cca5751cca193ac9310b16178aa189ab6fa2c3f4f3d7e72292bc1a5d2a69dd6d4adc22269b47372e5192e426ba550d986667005fd8dfeee84d0a2d37527b1338d3b953c72e9eba38a08fb60b6537f6dbed3220a0ad1377a689b7376b1a1edc2eb8331447922fdac9101129a26bd099264f5c7ea1492003e9618b5c63ace443271f2821f2bc938ed4a1b859cd4a922464d912c21235c93d375ae506661a1cdb8c952812f3587c5b3581a0a45591877a83b97dc9878da819872d4ecbd454ac04576617c921ace21a2f6000ce19107527ba819e558ac937f7c1ea268ea0af3d462759caac37c715c9bbb25286e73b58a60590e02c141ff928e027283980396256c93a3c38c3bd0427e5d2cee9cc10ce7a85d0ade60a8bf00970738b8d2561def385d1a343704e6ee669801becb8a5072ca97506217cdfdb68b78137b0a0b614265aeb8f486e6f39adb11112159c784209cb5bec7c21f5fce6e5914f61968640c29af1702596c7211936e262d95b10dd86de6b69efe70a0300eaa122df213603804983547a03bf69a8481', 'transcript_type': 'EVM'}\n", - "Time gen prf: 4.186624050140381 seconds\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Verifier gets result: 49.5\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where+median/where+median.ipynb b/examples/where+median/where+median.ipynb deleted file mode 100644 index d9087e7..0000000 --- a/examples/where+median/where+median.ipynb +++ /dev/null @@ -1,308 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "\n", - "create_dummy(data_path, dummy_data_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [2]\n", - "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (x < 50)\n", - " min_x = torch.min(x)\n", - " filtered_x = torch.where(filter, x, min_x - 1)\n", - " return s.median(filtered_x)\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Theory_output: tensor(40., dtype=torch.float64)\n", - "==== Generate & Calibrate Setting ====\n", - "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-582,1208],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":15928,\"total_const_size\":2126,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Div\":{\"denom\":2.0}},\"ReLU\",{\"Floor\":{\"scale\":4.0}},{\"GreaterThan\":{\"a\":0.0}},\"KroneckerDelta\"],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 4.408194065093994 seconds\n", - "=======================================\n", - "Theory output: tensor(40., dtype=torch.float64)\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 40.0\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "print(\"Theory output: \", theory_output)\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "num_inputs: 1\n", - "prf instances: [[[1780239215148830498, 13236513277824664467, 10913529727158264423, 131860697733488968], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [12341676197686541490, 2627393525778350065, 16625494184434727973, 1478518078215075360]]]\n", - "proof boolean: 1.0\n", - "proof result 1 : 40.0\n", - "verified\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where+mode/where+mode.ipynb b/examples/where+mode/where+mode.ipynb deleted file mode 100644 index 5031c69..0000000 --- a/examples/where+mode/where+mode.ipynb +++ /dev/null @@ -1,350 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "def mode_within(data_array, percent):\n", - " max_sum_freq = 0\n", - " mode = data_array[0]\n", - "\n", - " for check_val in set(data_array):\n", - " sum_freq = sum(1 for ele in data_array if abs(ele - check_val) <= abs(percent * check_val / 100))\n", - "\n", - " if sum_freq > max_sum_freq:\n", - " mode = check_val\n", - " max_sum_freq = sum_freq\n", - "\n", - " return mode" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "\n", - "data = np.array(json.loads(open(data_path, \"r\").read())['col_name'])\n", - "\n", - "create_dummy(data_path, dummy_data_path)\n", - "dummy_data = np.array(json.loads(open(dummy_data_path, \"r\").read())['col_name'])\n", - "\n", - "dummy_theory_output = torch.tensor(mode_within(dummy_data[dummy_data>20],1))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [2]\n", - "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/ops.py:144: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " result = torch.tensor(mode_within(x_1d, 0.01))\n", - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/ops.py:152: TracerWarning: Iterating over a tensor might cause the trace to be incorrect. Passing a tensor of different shape won't change the number of iterations executed (and might lead to errors or silently give incorrect results).\n", - " _result = torch.tensor([\n", - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/ops.py:152: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " _result = torch.tensor([\n", - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/ops.py:152: TracerWarning: Converting a tensor to a Python float might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", - " _result = torch.tensor([\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (x > 20)\n", - " min_x = torch.min(x)\n", - " filtered_x = torch.where(filter, x, min_x - 1)\n", - " return s.mode(filtered_x)\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[0,0],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":299,\"total_const_size\":0,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 2.9408609867095947 seconds\n", - "=======================================\n", - "Theory output: tensor(40., dtype=torch.float64)\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 40.0\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[1780239215148830498, 13236513277824664467, 10913529727158264423, 131860697733488968], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [12341676197686541490, 2627393525778350065, 16625494184434727973, 1478518078215075360]]], 'proof': '0c89af4c460b48510d097694b54b9bf5e94b332eaf79032a94d1a7ba441a01d502ff49429af7bc4924193019a22f3a522795f75fe965e6ec187d45a256d5d92203534e4184042cf2df786e54a8b78c51d2a8d4ddefeef033a00f81887b09f04d0558a9b73f48255e5247ee3210406cbdc07e926b3a4a0c9d246c100a14c81ab015de5467c85b6d4cc6e65caa2db038bc9f57bddf85848b32eb160efd1ba133a01999fc2f921aaf5e58662676ac65656e9a0047b3353eb6f8da9c60b827b245da16f6a5b4dcf93a14462395e6be1225a17dfeea8054bc87c0d1ac7076eaaaf1cb1fffebba03c7c9594b59e70f6591b5a231c696e0dd530c9f702299c56c32e9b108d8b617a4a0511ad78aa33162b283b7ce6f37038f8136a159dd7f593d1c092403f516624b22aa3961b9b97d3eb701d8a8c19fecb76fc22c818f1cc79a8b0919300f8b7b22d9b2a84c54e0f7a8ae1b2598fbb90556d6e90c8ecedacd1c7a50ea14fc1f4e7e4837079a679d5dc65fa8f90a7b8ab7361d9d097fd8c793879887f412fb398b02c9cb458e3c1474b08421a288759db388a919efe4d5aa8aa810f7e91d468bdc51782224f4ccc23d89df4c9ab5ce4b0961309dd5e9c97e0e6fe811ca12938214ee2aa7ebb717a027aaf659cdbfd16d2309e3e4a47a9be76f8ed7a7de09d1218d151300dd10120b74370b206352ed714e1be33708d30d1dcd7ec22a6b10bcab8af70726d6199736b7a229baaf522127cdb2626ec3bd2750b442336e050cafea0cc00975dab3812cd232d1db5adf285259cdce721b3c7543c0cc3fa43e30217fa919ed1394e8e118506099b609ca2e7ffff17aae901e4291889fc653b81243a20b53c962a76eab42c15070f5f5d23a7a41d58605c11f9b0a43742cc29b15de6e2e21f9293b7a0f6eb2d3c85669c33eed04167cf8e4e2653e9e17c6ce9306889df92db72c104b96c58b267c8d7ab1ae79640d40cb4161b60c70167d291b052dc783df8350aa965f355805ee8d672dc577183ba5614fb0aa70db1797760517c032bafd5bc9bdcea717950abd7af7ce9933060c00bd4f89c9c0f41506753f0bc6f0566e8711aff174ab82b7879d3b10890e241d7542134c642496a5eef0bb011d7512101f20645c90fd17cb569f4b0e10a26cec465c6543487bdd0448734e1cc8506eb6ac196490182b06aa30033e3e7bccc442a32d51e98056cf604bdd430ed8a621808566e18a903d9f2e812f8f9dc396bd8a01e09b8d5390cd51a464550e419d50e674bc8990167c1efebce624776b635d4656b6b943df2eefc6d420341f9ffe4d3f2dddbf0f0c5c3ebb6d22ce211459f96c6247e0893944bf7af2cb751bf1350e186b23dd935898bb7e1bd2cc1a9c4dd9071d4dd2a5566389812ab0511b6ceabc3658c4985f0a29df93d8e28eff4b9090b8da29ee88d97d23fb6614342b947091ed4ec0847961e1c34cac8da22a36139efba118db0816ab28722df15b1952fcedea129eac00e51381ea24886f580a1daf12c3367122a88679e2576bda1ed3f5e01eedc998d4bfc600a4fa349ae4f31401e3dce28916fc99aab533efa8163f7881a0dae0a410d7edb4a480a03ccdbb3b38d4e3b52471b13cd40243678c3040fb538c964a15c6d72631900ac4e4bee03d2132bb1fd307f6941b89fe35f61c50ecc0d591b2d5cb786e30278f64041158595ad3d1ad4b6409cfaafd60fbd2138f0bc2a2626e3fc391653e02f6d6e3256aa2b181199e1328da2ac8ce8db68126b6b198606e021bba7f263171f01509f966dead2a1eef95c922be167de0845219fc7d0c0c2315b58540d0ad0a28adf6cf5b74153dd6db2c18a651d2d5329c1e1f887ea2f7940c2f35c3a5283a8d1fef7cc547fc9263414f82338d0b3f480c2c24c51c213caec9fec73d7b99ec35827b3adafb3e7b57e16cf001fc10bd7666f8010c795c18d5fdf56f61557f7c6b6a11ba3c6baa60a95e714577053b429ac44509a117455047fb2b0825fdd09996ca38c3d3faeef159e937b5e63f70070a1ff92d2f059ecb74d84270be98e4134fb00143900f9af0f0f185126906c3ebf363240f149ef1dae275811cbbd1efed0edc137c798e310934b62fff0a8cba82e41ab3113389b63291688b44cf356807b74a42050b89cca1d5bacb22303210121b196a04adb2edc514b4513ba0e8274e574d75cc332cddbc1b7ba2bf0f1b3cee4461af260ee7eb970eeab16fb366544e0724cf5207b2e7a9b271b6e822994de2b7b812053fa6c6bcfa763d2bc91f8858fc14151d76857c196b38dda91a6e53179b23fa1324c0582a7931d36750b4c2a11878c2149254c60c5c532004b60363763699ba2dc23c8d8578ac8d9f8b4070a3c5940e007236adb5ea8d7a29c79cf47aabaa6a1d19aac5fe9211cce20e9bcccfcbf59570d380730c810b34e596049635d26de92131361a32f1943d026f8ef0845ae4ad90dc4078cbbab86cdd2ab84e56136fbf04a5014af0c6a33b39189a8e45c6a6bb548583128e1a747282c95da348eaaa1e222e3d67863cbb5b66e4a1845dc8c34d3ec92d372f856771b1c3966f8cd4dc292082b9e573273321961dc820efb02088fccb19dee71d016dae2f00631ddd1722000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fa5727981ed6433a0b43592e5af5c8d00dfe64dae0615461f0c8db99943eb00029f5edff9a34a9e4e9e2d5cf811f402cdecaa1297325fa4e90fce0ad93f37181b9143befc4981aba8d945a2430851e3588f382ba7083586a9693183852b370412eaf7053868ff3735ff5388db7f774cb10169d0a8642d9544877df4cb412ffd062924c26b51b305f3d2e57a2a40a3761b764dacba06ddbebf3e3e6970b90e6c124a1a4e2ada6999b2f86c07c1beaadc75298a53289ca88e239073613ed8e03323f685ffdd7baf616242d57f621cfe068b4c5fd6344fabf4bdc9d3cae01b13040d9bdf25c2d2c87dcf5ae91268f96f00b0919c215d728830c076b50bb4880ac629ced58c585570331f2f935be8bf4d42260f0129e72a52bf4a9797c6ef9da2f12330e7fa206ad236f50f8688781c37ab012ab7877e83111a6ed51739461680fd0109f63b04c60ceb957ab6a5cd500235d69535b7da4b06a36524f5835b0042a1062fd4625c27250413cd68f67d6e7541fec9bee8754ec56aea26e5930f26ab210a7261d3a74f47bd5069c42e82c430bbf5ef6754139a24b139a18b265021bf5d1aaf86b78370c138d71ef1fc8e6c5bc5116f3f272a3d43c9c9b56c39260fdc9d14c56edc2652a236013010df4649f6627cff2f9e9a838a67f5d695db95ba618e040d535a3f527bd926a14e2e32a8f11131cf181e2be41a66b4ff9f04af9636cd033502166ede3176558ca7c6c8694390784a430e8a3f58cd06326b25240e335121ebd8f4e0cd001b44090bebd5e248282c22b44e74811b449c3456d7c2e62fdd03c21b070913828eceaced1fe2b30698ce7f83c5012bc5b8b5640cc54bfb67e11beaf28f40000e0a9fec67a6a6d5c1edeef5b29fb2689020687d8346c0944ab108e05f52df8760520d415c4c4ebb12ed5c05c005f0332a526753e3313d92f0bf066b05a7324090168d49e90d62dadc500c14aa5c0d3088d202b506d53449667e06b7fc7ca1863ee90045b97f3b1d8e32615c134ed35887bac5635558b1e341a113c6da71056af53ad640163b600787ab82c19c934dd56083d405ae6c4e6bc49004a2da3ece6bc830e4bbe9695ef92f12820dc8dc60a24aef4279d07032590e03', 'transcript_type': 'EVM'}\n", - "Time gen prf: 2.9697458744049072 seconds\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Verifier gets result: 40.0\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where+regression/where+regression.ipynb b/examples/where+regression/where+regression.ipynb deleted file mode 100644 index 49b302e..0000000 --- a/examples/where+regression/where+regression.ipynb +++ /dev/null @@ -1,308 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "\n", - "create_dummy(data_path, dummy_data_path)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [0]\n", - "selected_columns = ['x1', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " y = data[1]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (y < 20)\n", - " # FIXME: not sure how to do filtering correctly here\n", - " filtered_x = torch.where(filter, x, 0.0)\n", - " filtered_y = torch.where(filter, y, 0.0)\n", - " return s.linear_regression(filtered_x, filtered_y)\n", - "\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [0]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":0,\"param_scale\":0,\"scale_rebase_multiplier\":10,\"lookup_range\":[-15208,13532],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":7872,\"total_assignments\":426,\"total_const_size\":5,\"model_instance_shapes\":[[1],[1,2,1]],\"model_output_scales\":[0,0],\"model_input_scales\":[0,0],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Div\":{\"denom\":100.0}},{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 2\n", - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 6.506374835968018 seconds\n", - "=======================================\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 2.0\n", - "witness result 2 : 10.0\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[6145674602038562713, 11796601694033167407, 3132644448460071153, 1431119980703310933], [3957842973089931008, 9845595232537184463, 786695466761881781, 2995319695946854765], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [6425625360762666998, 7924344314350639699, 14762033076929465436, 2023505479389396574], [3898461358030585804, 15381148731429954174, 10354293334678834451, 3143530863341041542]]], 'proof': '2b7d33349eed5e95d7471c71f1dd3e70b08372206ae05ac37daa9b8347ae2aa905d5fd6ca3b35a98e66f93824964e83486a967a33bc5434ef3b12c7ab548343516c9d1ef04e281285042a86fa49a3a6da741a5cde6a27939a970eb6ef54ef63127d5ccc6c64c985c106c2d89d078ca7422aa667ad199c8f7f428bbc86828a9941f24f52d5124c5f606d672983f95a2f37c8b270ebcf2ff0d114fb3670698e75702eea6bf9720ebfdfab90cb28b44498daa062b9d1ba14bff44e9323b70c132f7051eb48098deb68a3c7a485954f5211df4c47e8f43e9029e135c713f005aa4d20269f73271b58fd02a667cca44671113ba7d2c1613354541c0acb57ed15cd40516974ce4ea5b721e44230c93c220ea797208fdf43d0d6f2bb1a1069bbca5e58e15a2d183097cd45eecf879d7d8191fe05fef915b7676c71637b8844267bfd24d2daedd964ed42ec1db0ec5278c671242c2f1c720ad3574e62121f714d9e229142e0d560ba9634286ee9332ecf7bc0dada81de5a61e4117e59de40d16e6c9a8180bdb71d0950e7ee2ef9b0b02250a3e66577625a0232aa380ce411b3e9912e5bd2316354d1135574b74a50545de6ca01607dbb219dbc0cd9038e874baa9d17eb81da51ce37c9968eae2b4b0ca83dae5933a311ba34f8858b1998bc3005d86bc1f062abdabe2d1b9815757fa9ce216dd7f7807cc4edb83865dab26f94107836a5812acd2e6c2cfb4d3a4681e83d1774f9048355e6a50ffe46df7c5d4fb8b0fce94247e9598e6ef80b7465fccbb1199ed84c6a805c7270f20e4d2fa2133a1dab6da26ed10e79cf537524ba65c39904fad8df034b1ed5f44699a585c8faf425c366c0c85d29f011107b858fa89dcf6d3d7faefc9ffbfcd720a281209e6be3adcb8c80278d6034ca024df5fbbcca258d909e3a72895801b413475b2bb7b8add0eaee42ae6f2b4e7d72a7cd93609085f307b2842df6276bd3e27328a694e119ddcf3e82b94bc26f37babfb3e19f02bfeb2d5cf03608b96794f49a3f3659d625296595d1e45fc7e07f112b7f63be44c7278f698bc1549ce1798b88182a41f346ac77bc800577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f911800577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f91180a32bde060b784da90f16d5084de2ddf3963bdffb235720572ab772777edea4c15a98d5595f84f52f61959e357ffb31f4f115a1744bf5616ef7ad52063b1045b18c971ce34f51b6d40eecfd208e925879d1c7fb86c65465b5aa2a21b852bc9c72a85bd9a39f31cf63e49aab324b4faf8d780c10508a65bde2e66700ada7a1fc0181e112ebf741fbf694e0a2478f74a98969a3e889a1a994a547e2976959a49e42faa4f2cf854670a938052ab9e2a043bce15584aad24df7a0e9d953bb45f75352fccd5439b6050de89485e1632eb199a48637f2912016b380563dcd5b832b61706af507e9326cc90edc8a597b5b34f4cb6a239801ac788485c6026db1295e7310e6f8bb276d1e3dde90346692d6b22a357971a799151af59eba708ed3c52c91b26a70ca9efee9aa735246918a6ff581ee0f0b119459d912b64d16aca480fe88a2b67f5a31e014d81e0c835cf350e976aaf0bd163d3a38cc65d1a9b277878a128135f6640da9f206117bcce7b3c8c20645d5f32e22641899364b657c2a6c89dcf03688dd8d48ab9bed341d570887846e756bb91c95dff81e1b42522b5e11bbfef298ae5e1354b0859a000beb6a3d6cbe308c38b854f41d1cb85f5b7990d26f5852487b54dfe4f936a82237edb3595f13072683d2e81198a2c8c49bbea53253b5d20ba530f373c287e5d3f98bd0331a98928ccbaa1c5d24b434ca7b47b16dd7cee16d3b5dc0f0e0e5baccdb53344489692a226086bcf13941db4104c9257cd81a213722582f10b58f51509cb39f2772d25f89493184a4cd767b1aafe22ef52bfd82bcdf7df9ed4a123b9e6876dfe7ea249de889cbc3562c16d95c2f227126eeab91625c41b1c3bef443d91f4fa35bd95fd6475a138a14b37d3808d0a161ab017921aef14da84dc9c26153ccde9efff7137a76c207bbeb93e5e068a42707d9937590b41f3a7feac3d387fc55760c234980cab0ae8a6d2ca9afb41c0e9c744772a472643aed6f8145939f0021133c51f97562a2bab1b2a605ba12a13519b50d095fb1e9c6e24dfdaf7d876b1977630fbb14b059d46f61927a91006291de24da40db10950caaeb65acc777a008283541af2137e7b7844e11fcb3e0c88477e34028df20e3e2f365a061f1b2b8d081d1412bceb1fe29d7d18b6a4bebd172126f4ae78a61096c21143901a5deb89297eae736c98a9c5ee1384022ceca4974615a79c00451192f3bc65c61c3d6ecf45a99038d823082fb5b3ab1c9771bf8b1341cddb0c860e1caea19ba8ee2b6efcae4c833fe100118d7fe77227cad5619bcc6ae9c81301244a6c25539cfa4561290aa45471aea81ce7adabcb6a6ac007f15ab14db8e6e8183daa7f221269c8a4065b4a7d2b914e69d510e5ee2aa6c2261dab3dbebd94e42dbb6d831d3b3b93e9871b50921538a033b43e1462bfc182848715bdab69a1e109259ac88c504291e9da1c21b8d0a7aae734774f23157859daf33aed9efd31bb13a35e0aafa509a5bdc34e343f911f6ce3315101d06139176bff3f77131b72ef2743d234d8fb8fa9ccfb0f37201cd0efaf12439ccdd1498c3bb7e31a29599c182da348304aa7628a1b0fdb41498bfa0a0d1be45726a0b186ed454cc50ea68d1404a8d6e66fc9daf0c08b71495a5ba1b0dd1a4e36e321a0d3a828bfc83abc10af2c02ca02fb3a7a0e20a7c5486ea4624c59c7d524a8cee4474107820fd854e1051fb118fb9fe841b1bffa1e6c14e3f152b5824109c77384a249bcc0a443a00bc5256ff0a6b3a45e9236aab489a2a2701c1b5ebfc821c18d03d271f99015e4d71818173be26cb9317830aa16ff25891d0718ad685e36705480fa8c43d430c051f5191807226c160318a996ab14dbdf6e5b324f7a6c0292d497e1b9006115a8992b2d37d0a32d1bec456931797283d154443e07b0215c30a3e673b6a8401d9310e4229abfd56288456d4671d5f6647929fafdfae304df3c34d7c0917bd0358178cf0b593cfd2b3d424ff789668b486345988d4b916afe7fe6e643c9114fee1366401dc0b5ef4b1c93cb5cc16a86bdad6bea70e0b1212e75f2bada8bda9ac7b60c8a25543c9e160ee1a464c472573b1228cf07ae0d0910c1bc8b24795f10673ae309246c61014ae581e5317bd001ce1d2c832477bad6993caa797a1a85e7a37bf81504416823ac5c73a3b408a17de567a4d5f0b7aab4b355eb6bc71171bbdb06e28b0c5343ccf315f7f54ce237df2c97ff0eca79030ef00df5a06523d41fc234e8c90eb7cd146fd73fc6915dd5d636d6f7e3ce03e29e4bd7a830c30d2f7a21bfff6e25351bae2d844ddcf0bda714a769689d3ef2b905c66e1f9133415452833a935019abcdcca2e9cdd5e508611c8581d417f648e258707b41ca7d66916bb8d3240a13ccf89171d04cefdea0808756b90ea082ec7f8a05f48f470b74c8317b15ab401a8346acefe893d74e3f946b8e2db1f23e90bd4e96910f2f080763d215a9976a15de00e55a688ac6ef85f6e128e573272d2e97d56cd1cc7a590cce435b77778d15de00e55a688ac6ef85f6e128e573272d2e97d56cd1cc7a590cce435b77778d1f593ee0a502b95f8301eb575f542a7254b6d4ff96215b60439914acafd2d5bd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026e0e2b20e9ecd88cd92915f28c29430c7d706eb4ae5327f131271b7eb404e061d6877b58eb6bdfce6a2d4fd34b12ba82b4b90864c593d005fe0178f09a9d31019ae9b56f285dd791aa2c56f68c68866730b4ddc5f2ef3d32d8443e1d1b0995a08e9fdcb8cf096742d01bcc496c928649a1c324fe9f251a35ff63befbf915e2c1b17b324b268ef952c11692c464e8701c69dce00b6f8f93e4f1c20a4c266d4432f231143752f7b04f8a7c13ab6bad069a250dabef89dc9e7f932a8265ce1db3d26a887dfe4d5e55956756cd99a01959fa90cdf0f0650fb3d1fb5ce5d758bdfa900000000000000000000000000000000000000000000000000000000000000001f0f2519a18038b4ba95824c02b74c0949cf77db914c1931c522aae64d8a7a210ef7e10a16fd4ce561efb9eee9f6a4260f63348418696b42cae8fc04caf18d7b1ae1c13fbe4afc5b4b0add17042df4ba68f07871564008c30efbdccca50e5ed12befcd9afc475ec039e83fbcdce59929060fab45ee3eed742554397b38326b4b01022b24e5eac10484f94a7589941291bc365aa8c25692b2d3a053dc9eb7776b2a7e3973206d7efca3524a805e676ac151fabb1726ec0f01827a94d9b314a1231fce6514cdb4f0718253d9ae87dfa1d169fa49771e59d378a90a6deee620305210304bde2202cf688f12199c702452d03fc04ecb11d60eb31be210d4c32a04ab2da0e42e0d657ace16ad3c032b8ffeed7321b584de38f2147b7a6ab92f7328ae1562ce72a89085da1264eaa47025248c99f4320b42479780e33873c2fdf4c7a302f7395a34d64184f312e304d1403207b773f8e2b5dc8e4bc7c4a886bd887a8c234397ab6922225a474b65857cc8d9d991528761ec882dbb0267a8a0a1e45e8225b3dfe0ae6cf8cc864303c064493d50967df4725d13fc5762781cf952c767a121bbbcc1f8456fe272338f326ffcc3c027d76683c7b4ac11d3b2b945678207ef2669025fcca64e7b30c0eac372b72cb1dba3ffbec525de2eab01ad8bd9a183e218bbc82083d8a5400edeed92579408e54d20f1e8d9498fd2d20f30c3fbed8332214682a8e25398119d3cc1924deee1f44898af71088bfd20983879ee7afbf7b72db4a9c03bef99071ba3c1df464c1953c0c46ad16dfa8091153750538f50b0bd24c9d7ff5681bdf8894ba390cd9849a4c540b09bfbaaa175297c90b1d44ea8a32ace5bcc8691f720b0d970f4e0d41660a0452c5f6d526b70446924c9ff66dc1e0705886119f9ef91a12a89eda8dafbe847e4bc6b4cd14718ea9a4d89e928d85f18f9d8aaab37d64ecbe454a765fcbf30b3b2e2c8afe0dbf054292262c2e6d2962b48e815378dd9d2b6f5678e9b91a6c1fb0f1743642626749394a4516ee0d6231a55295906384f2b168d7b13b532100fd9cf0f345ff7fffd950661bff1d0ac5a2796064af175b573e4b81b80a2363712b01c630262047908e2999d69e2ad381c21f9f982f94c506679fe365ccdd18b67c64ba06a882c1b7b32bc2f627c2bc9171c6c5f3df834944ff6e531948a76b02232650d0f60790e1a40b0a23c17d320d4233e31d8974ba62d48947e4719d2afc5f8f1ad98c5577316d271ae18b4722ac1293bad5637da0b0bff3cff94f93920d551e3698c4416c23fddcdcf95a7da5cbb0a981e341260f317c7e37c74dc26794711efee589325fea4e9817d1ea6a7665214e7c7e944de7f85c64f25d168a7efaf3f5c3fd3876068a57a7fac3c5fd119a910c09c0058c1e673783150e7147ef9458ac13a52d53b49939de1888aa61a5bde1cb6586de5ec3b6c3f0b4cfa2c30e41583b3c5da4b58ad8308455654cdc7ab8e20f969b205f54abde817cd5feba2ca33f685f4d9c08c45c04d93af4e6d3ed8631cd8ed9a03d6f361280f281fb437f19e7b634667011f027c45253b159af1ac1b2835103352b9a3a927a78eb186ac9bbd34091e727fd2d2509a04a21de8bb59f820f969b205f54abde817cd5feba2ca33f685f4d9c08c45c04d93af4e6d3ed863275c0884d60b61426011ea21cc8c450391f9c7aedf36bea12f04dcca0cde5dab0e0b7a4539431b8dd5f88bb4bbdd0fe12880a9ee36642f96d0f234dd7eb6a95c009b1402ceac4d20b4769acacc30b0598ef39c827480bcadb9e63dca8aaa4d42222a250db46f0dd2b69b5553a9ca97ead1fcac49b4f52a0cb48578fb8d7d43920644c653d560572870cf57327a7488231697a8f5a89d8ac90cb8ec7e3c72db8120400a629d9f06ee176baa5b643ab6abb5db6f29c358c82c6667063aa6c115900df618c280bb1516c7974e215e9695737b0cbef755737c5f7e3b2d3366c7a097', 'transcript_type': 'EVM'}\n", - "Time gen prf: 10.795002937316895 seconds\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Verifier gets result: 2.0\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where+stdev/where+stdev.ipynb b/examples/where+stdev/where+stdev.ipynb deleted file mode 100644 index c4e49ab..0000000 --- a/examples/where+stdev/where+stdev.ipynb +++ /dev/null @@ -1,304 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ezkl==7.0.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n", - "Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n", - "Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n", - "Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n", - "Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n", - "Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n", - "Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n", - "Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n", - "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n", - "Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n", - "Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n", - "Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n", - "Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n", - "Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n", - "Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n", - "Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n", - "Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n", - "Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install -r ../../requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import ezkl\n", - "import torch\n", - "from torch import nn\n", - "import json\n", - "import os\n", - "import time\n", - "import scipy\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import statistics\n", - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%run -i ../../zkstats/core.py" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# init path\n", - "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", - "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", - "verifier_model_path = os.path.join('shared/verifier.onnx')\n", - "prover_model_path = os.path.join('prover/prover.onnx')\n", - "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", - "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", - "pk_path = os.path.join('shared/test.pk')\n", - "vk_path = os.path.join('shared/test.vk')\n", - "proof_path = os.path.join('shared/test.pf')\n", - "settings_path = os.path.join('shared/settings.json')\n", - "srs_path = os.path.join('shared/kzg.srs')\n", - "witness_path = os.path.join('prover/witness.json')\n", - "# this is private to prover since it contains actual data\n", - "sel_data_path = os.path.join('prover/sel_data.json')\n", - "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "======================= ZK-STATS FLOW =======================" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "data_path = os.path.join('data.json')\n", - "dummy_data_path = os.path.join('shared/dummy_data.json')\n", - "create_dummy(data_path, dummy_data_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "scales = [2]\n", - "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:166: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", - " is_precise_aggregated = torch.tensor(1.0)\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", - " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", - "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(double) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", - " _C._check_onnx_proto(proto)\n" - ] - } - ], - "source": [ - "# Verifier/ data consumer side: send desired calculation\n", - "from zkstats.computation import computation_to_model, State\n", - "\n", - "\n", - "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", - " x = data[0]\n", - " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", - " filter = (x > 5)\n", - " filtered_x = torch.where(filter, x, 0.0)\n", - " return s.stdev(filtered_x)\n", - "\n", - "error = 0.01\n", - "_, verifier_model = computation_to_model(computation, error)\n", - "\n", - "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== Generate & Calibrate Setting ====\n", - "scale: [2]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-40922,664],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":3919,\"total_const_size\":309,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n" - ] - } - ], - "source": [ - "# Prover/ data owner side\n", - "_, prover_model = computation_to_model(computation, error)\n", - "\n", - "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==== setting up ezkl ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 2\n", - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Time setup: 14.081051111221313 seconds\n", - "=======================================\n", - "==== Generating Witness ====\n", - "witness boolean: 1.0\n", - "witness result 1 : 14.75\n", - "==== Generating Proof ====\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "spawning module 0\n", - "spawning module 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "proof: {'instances': [[[10537101196673941533, 17227541574925932677, 11187715152301828262, 1869164017182098189], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [4944024074473963208, 53172020031966965, 6785527786944351863, 414441106336697639]]], 'proof': '1fc8d8cdb25d32a92bac2845938734ebb3f24b2c848a52fca76b2daeb6ddba842ed8ba112524ed2ed40ee5c55d439f3d036ee2a7f8516278898b3586650b5d70204644806bbab8731e977054c14ccdf5c863d5b0171ff26b2eefe853201de958208f8a4cc4496a887fe9df7365cc99e7fb71a40c013dfbb9d47aa077f0c3c85c034025d710e60dce4fe61b8d73a5cadd0885ab7094173e9328fa7999d768083b1afdd0c6767c40d1b735a90718215febc47f13e1b7ad8cbf09d90adfb16826621a76ea0edfb560c97d7a037b464a29cd170490df343c95d280804943045205aa1fa8d459eef338ac475b21f74b4ff439034f994a53a76d1252a4bf76108ff38d0a0f49907f1abac86fd20ff5a14f720ab58c72cf6d9266e9b448fcec2bbc3dbf25f9fe44c41d8df2a712e367c862bcb9df6f921ed4836aa607a1929321927ad62e480e828a6d8305c9ec1c660b54e2189396d2932042e0cbe80e493b5b6d245029973732cde0d75a7155f1512e45435381f848bf97f57275f52b85ef9149b6e70939d7aaf9230f3bcf68496410d96d5c5ea5b2a74cac8fa89fcc32086f47b2b929c347568b81a8a566e780ad43767721543a7d0b15ec2df4997951f44ce3728d270f87d4db4a466d83a54e5d330ea81adfe46dacb615c26ea4b17551d269b5a71e739f4a9ca806387037055989b1e63086ae1f4118a94a302141d8ec89a87d760ca06e60feff9ae1b6a18a51d380c360cd005c03640be5f4cb81610e1b57ace424be3c053e9229076f792c1b2f9eac91fc3f03114d6eaf5dc2615d9877a8c2ec10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4117634017d4ce083c7650b0b6509ffd74d0615c3709a28ba9458ec27e336bcdbd110bdee64dcd278570abc6625b5924fc293d7fea18c13462a2234ae47e6e690215ecadf811a097361282280466b77d029fbe6dc78d4dda2fdfbf78e76df8593a28bdc6f22d3a653f57aa111facd8a6cc22be4de51b8cdefe73f34e2e4862d11328b30fcaf5234f953780ac0dd1c3a35e6400de849eb6e8a68d5cc8f4015398442d5a70965753505363c01d623a5f399c2e1e0e34ada51860d05e39fc3b52c19b246dafd60bae3ff1315249a495cb56f57d17e8d588394f12a311fd7b536dc4b92ce6bcb0e1a69409b283a93bf56b828aa5aa19c5398b95d1b51ca5353daa44ba1bc6f0288dc4b05996570492e33505fa29551889eab0508fdd233a45e0c2f5dc239d6c2995962106c31213b35c9d7bb5173ae57e4b1956d4a14096ab34a179650b74c73ad86525e6dfe80f44a523dc9d96d00a9b66d299ee54c21817424a6f24032e58220efc3939bc6303d997ee97abd3e559fb40594b97976e2f457a99336618394ca5df8a6e38c227dab2449d97e926bb4d8f9f5731fa7fbee8e83b76980a16ca75c0898fce8cd2b06240fac53b924f0b2ea40f14e1f767f837c9fbe2bc401a89689a6ae405a9a2c07065ffc5f40ac11d418ea74100ebb062e0928412efa4153af8c7a597369bc2e06c82646264fe820128a76142d4c66ca71a26eeb286330fbd2b95a2df86a760c952da62736e23ef00485197aef51dc026bb6077bfe85b1011572d2e862b76d7ffc3d1c7f3161a6e721278cb6c496e231e17ac1487d733210fe1991e9aef2b5088cba951fa7529e59aea4f12a4cd7aa417de4ba9f55903044c9a61323f04a9fc308ddda85b4705e509587792aba378555e64a1aea01e3b0de9d793b4808be150e64230cd70812f181a52111fac31dfaada6cfebe3ea267152c3f1a391caf4353f5c97ef3d617e8ad9dc7d2492649872343e6c72318752409fecc6e78c1baf70903719a90e2419f49c1d7d03aaf1793d24eab972dfa0e7b05a9ac9788859c448f78aff6b77f4983640478496878b5c0ad00b559a477911b08aea934c21ee2f35ea131d115f5bb414fe82d58a62f2599ec02a723a92ae71b1e11c2f318feb18f9a932ecb5d816c2ff347d9eaa2c6e6c2faff76a11604a93313db354829d592cf1dce3202c1678a60a07380a3da6dc2a98591d3fc7774ffda237f018ea10ddfb34cb46085b76333c571954b458773fca2bc79bb688d60d201238cad2e5b6f652c3dc0dcd316e73be783651dc2d3e2f56e73c72e7fc24393c3042e3bf7734ea6f1a6d2bfb42f735ae0b183eae03896988701e64b9b3407348b3060927d918505bb899278b3e582ad885f38dcffae57152df1209ac431c2a5f11a943476026b1a8bba28e704b04bab39d40ee2ca2266ec01a79ba43cc1c2589c20fa88ba21cf4b034f07b105446c45dbdf84c4e9c7753fa86a94723c58d0c1d302d65b5b093fae28a6731d4c6e80bbab56b485d266166271a341e77d8e312ca21b42cdce9c0860e3f76cd328e0a4d70506af975b60bb768413ba7601795ae2582c59aa7151674a3ec2815eef55b880e2c328d6e809869ba9cfe48d7d839dee400c8fbdef162dfc74d1a66792388fd407e7bd4808a0d42d8304d8e5655140821e1970c9c8c23593755165225974889ce7ae110859849fa5620172d0c53ef2f5c425e1fdea06f792098fec0ee2d51e983d1620ed8b7029b947cebf153f65ac3d0314ecbd657a952036cd0ea558e3117129608cca3cfb570937ca64fb78aa2b84ea051608c36b0f86b853a91c9fe845b777ba6c5198be47d823cee7a846d2179bd315b2ed93021214b85059454463538c2b1fc7839bc27d1610c36098308d859b8b09904925ce58e22b0fd655e15328c940dac9f41c5b35df388ec55bb60eb66a540741cab20e30145074025c72ee5bc678c819b7b64214a03112cbc778531963930369f7143bd5a9d60a5c52171b73c80524fa42499e5a6d70012b59c9e2667ffb282626d881037cd782a457c2a871426fd2a3ac75950d26a3eab044abb7c274832f8e1dab314927aeae015287c79429e73dab1f3683c8d1d693b49323d917063627f67489fd6bfdbdab75e9f563894ea76902c060b0b30fb2719563c053ded81702d1a214841947d034e8c1bfd621fe6b8b1da13fc8c6906a9c92e63a81a7e90502e5903650a7e2b99575e75fa974bb119928fbe854cadc740c12604b7644204f1b7527739b068bc04c74264df841cd19d0c30827fb2801c7fe364642f4a5afde10c73406c52516abdcb2d8bf6e3ed1509f7b6cee42c6db7fb77a1dd38215cd361465b6e66389673aff3be8032c58c8ee9467df6a7e007f12f2d688cd76d835c00903bca8c28ddf125585071597543fefadd2e5f973b03c104656abe956c4944d00000000000000000000000000000000000000000000000000000000000000002508e5114ce7d8d2653f09c7b7b93c624deb9bbc12342031caa0329da8352c1a09d81415ec1fa61b5772d5e73fb25ff62253890a3e8288b1f425b22c0b6fd9133016ff323f73b811ff9faae3cb9dd7aa25fa1b196a8c0f61f40b356e9435be2827308a43e3bca4d0272e50f4c71fa2bfddd6d7d06ce3e1168defc1ab77c9eba80730a2093a575d15d06ca7717254267ad363ee22ba14644023211c4f01ffd8af0de28d19197a8615a8e6dd9a6e4d3a1429672b3b7a9f8667514a44924b6736002d4ccc85e68652d0834671909e4ac42c6ea69c972fab6bf56584e5eaeb38e1f0244f41c9205f8be2d213d0cd6fedf2cc946358a482824574253a443ef36129a411d3eb5864716ac359e628444f399a40a7a46f0b518b5c5251172cf7eba7eb0616ea96e45e3c6d13ceb3db3693a462266c272c5abb0079e772be81be83ae0bc909841d1960ddd58a2900ef64e1bd9eb4e59f502bd70e9e2402d5705211db16b72b6ecb6aeed0e87a32ab5a56c6d099a5f4ba36109c5621e3b8c8b5556b6a9002208b1312b74f8c6586cf0cfbe849ca28942863722179a525a7eb62133c1b41a01a080d9b0ac775ba3d70c2b6e76a4e97bad4d51d2e012d36cce4ccf42791aa851ef2d5f00d38cee9f189f930e1e9cf31a00272bd36254b74a3425f7a6bc1a650176fa35e26472ad247fb9bbef27ca14b26f29faa9d9a8dae240212a65aa309ce266b43327245a68b298fa8e0441b759a99256981706d416f50043d6a9b541301179e4ecaf413559f81dbec4e4959cf08db66f4848566516d318155f3159a62ee0adb4ef5241a8639ca697f7083eff9b834381abd5a10d9a59f8bd44b53c3cafe255607a2ea07d05ac32df6ddf813483fc7a59be7c4f1c35a42fe87ffad1710ab0bf740634aa4fe76b9ccef51890917b648aabe5a8eea7393fc8ac26469e39256228e25e0dd7b8a0d03b2cbb8f3674b91afcc4a34e2bf7cdfce8e120f4d2b78852619bfea9d71047f344ba01573104a5d94c2ca19c724339a42e6d0b5348740ff201f1a1ac57bcab9ac738395a59a8dac1ecd86c78ac2a6bf66a9055830be502522adea242b2b28cadfcfd2c787f254f5ad87d7253ffe34afa45b16ac8d16b59921a3e5ee42205ce8ba3736285f5af95427dbe5a074210bedbc92b3379caa15822014bbec50c8468ba2c487dcccd9d06cb87bc078fd2557ebe812f9f7c772bc241d168a15396dc6040e49268ac29ceceddf40226144512c21689bfa1028212bcb1e5254278a862150ff74e623f332909fa25349b38d1079824ced2bc20a387013205da0ec3edc32cc4ab69c8f3deff13795fc15fc6f62a8c4e948a8f33ad1e1fa13d4613f789aa85b6a21d961bf9618f737808c9efbe2438b5cd142103015bfd224234a4d0f05689f17bf0effa47c7981b9697be41e774a97d7efcc30b92af4ed1555681170f05c0cc2fc9242d8ba4a4d56496719ef49135a15eb81ff2b75847d2bcc8076f76a04575961c178182fc67ba2f3fd5bdfde9170e0075cc0e96d02d71e1c31bf7dae6c978d84ea2dc340e02a6a5d92e13830f41d8935f29debbcae2c230e9d6643d89c64338be561955361ac01a27c2c5a6c1325d971b7a503f65c620047ad90d683d734c3a05b1fe6b607ea6a30046971edf0a30770469c3fb4faf726d04cca9f66d14fd5f10d1bd08c302f73199f2546c92dad69f5908f079a32e12b9b981450a7acfc84313bf89bac378f89bcb0a045ea86ce8cc3de82b5203ccb055eacbc0ce34b50fdb28c0937780f3c33033ac49088b46d5e23f9f5b8829ab61f348bfa08f624e7b02b5055694c016ede32dd259a391ddee343b5ccc76c82e71627fea3afa950c8289a9eff72390f8baef3a97ef2e1e099fee57e63ffe502142a828f31be21c4fddcf8371f15a37f07f53aa92a4232c0ad64f5edff2c53c53b1422a3f8618db1fa8547b3c5852a5aebd9ef7d97a69f4194559b992281dd9b74215c41e868d8a852f1cee0d6f10235915d08e567c8aeb59c7f100a9d2670e37d0f6c9eddb634634bb6d437de9f7516237de0d85b4bb7750342ae3360eb0f20191541dcf2441a9a133dfa0ba0fde0089bc01f51c342937f36ff4f85be535c1a221de688d5f1c30d55f0d86a15e5da04f1452e528c37fd33f002bc80688b744b22', 'transcript_type': 'EVM'}\n", - "Time gen prf: 21.13408088684082 seconds\n" - ] - } - ], - "source": [ - "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", - "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", - "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", - "\n", - "print(\"=======================================\")\n", - "# Prover generates proof\n", - "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Verifier gets result: 14.75\n" - ] - } - ], - "source": [ - "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", - "print(\"Verifier gets result:\", res)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.1" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/where/where+correlation/data.json b/examples/where/where+correlation/data.json new file mode 100644 index 0000000..18cf1c7 --- /dev/null +++ b/examples/where/where+correlation/data.json @@ -0,0 +1,13 @@ +{ + "x": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 + ], + "y": [ + 2.0, 5.2, 47.4, 23.6, 24.8, 27.0, 47.2, 50.4, 58.6, 57.8, 60.0, 27.2, 40.4, + 63.6, 28.8, 19.0, 65.2, 50.4, 63.6, 24.8, 35.0, 41.2, 54.4, 61.6, 57.8, + 78.0, 63.2, 55.4, 78.6, 72.8, 51.0, 62.2, 42.4, 47.6, 83.8, 62.0, 47.26, + 90.4, 80.6, 87.8, 82.0, 50.2, 80.4, 86.6, 80.8, 66.0, 95.2, 58.4, 74.6, 95.8 + ] +} diff --git a/examples/where/where+correlation/where+correlation.ipynb b/examples/where/where+correlation/where+correlation.ipynb new file mode 100644 index 0000000..e887a5c --- /dev/null +++ b/examples/where/where+correlation/where+correlation.ipynb @@ -0,0 +1,256 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that it might make more sense to just request cov(x,y), std(x), std(y) and compute correlation on requester's end instead of requesting the whole HUGE circuit of correlation. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example is not necessary. In fact, a person can just request cov(x,y), std(x), and std(y). Then just compute correlation on his own as well, but here we show that the code is composable enough to do all at once. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [5]\n", + "selected_columns = ['x', 'y']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x, y = data[0], data[1]\n", + " filter =(y<60)\n", + " filtered_x = s.where(filter, x)\n", + " filtered_y = s.where(filter, y)\n", + " return s.correlation(filtered_x, filtered_y)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path, verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 5, param_scale: 5, scale_input_multiplier: 10) ------------->\n", + "\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.0014694929 | -0.0029389858 | 0 | -0.0029389858 | 0.0014694929 | 0.0029389858 | 0.0029389858 | 0 | 0.000004318819 | -0.0027814922 | 0.0027814922 |\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [5]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":10,\"lookup_range\":[-2292,3712],\"logrows\":13,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":1517,\"total_const_size\":308,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709724737371}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 0.8491756916046143 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 0.53125\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['7469705c7b45875730aac31b009e8f9e9f9e57031bba148110877f78e4518c22', 'c1f946e3fd2b2229bfcc2dc9ff7f4dfc1fddad53635becb58d130bcae5504712', '0100000000000000000000000000000000000000000000000000000000000000', '1100000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x03aaee71028b0e3f9e18e95faf91a25a27c23169df088238d03951419aa5fad90268273f3b2027430b5d5f1ff30b28e6d1d858c9e44efece6aa8bf25a0d5ee991a3c55a457cc167a914f4c83a33a65998525fa1e8c7a2b4e93ccd22c1a6a210904a0d1cce495ec2cb43ee49e063c1f6a220a919673fc0b7cc8b0f9e2f3af29af2023427489ce5479be74a14df012805bc9a1c2e1a4c541039c05c013f864d2471cc5401462d65b230efc7c63a32c9544b4fe8564a6e3c2e479c938a10fd1f13d025e28b676518ce24f0b8018f4c7c72a798ad9944911bf0b862f84147a88285d2f0776efbbeaef6134f99fe04ce6e5080df3daaec2c596dc471a365778a9799d1242f8bde9f9d2ec7d2ef4b87362c0f5fe74af93a2ee725ec3d6551392b891051eb733368f09443f6d723f7f8c64ebc42ec33f189d2d7ba75592a4d0fad1035e1ab56639a1d12dffc97ae03dff594fff3a88c86914b8c732cf7290f1142157460eb32b2742d5c29ce0f8fa91f0c24df0b483628a9cbfc63d1f821fe8f7c2e97c2538de6efa21684d0626655457a8cdcf245d51446cd9d73a934aa5cb80009ce6009d5c52947d6b1c7e482b6fc18ba26eca1e683fbc00a4000dd93634a180d1681a856a0e7c20662b553291483254b54bf729ac2885e96970bdc9e78476b1db1b0e97a21904efd5988b678baff2b2fa556da2af1f5c9bc6c01dcaf90951639e280ad52c3e98c0977ad9279402d5aa364d3835b804a63d607a6a2c6bf48c131da42b47fb3ea95d3e2d8a334b2fdf8139a02f308aff45a2b36f42ceae78cc073e330bd862b6592aa4e95cd6f101f7d19de04672860cae552aad3d73446b40e5017c0f90c89a41c7ee9fb36ef4cd73f50191597a637fd85695a0b80f984cc9ac316b04a341df6bc05f271b660ad0a1027362fee43cb047b9bbd5810a56f88905749b2e7087c994d85114d0ac88c58fac27e0d1247c14628d1723ebd889fa197d71fc2236db896b1e934661fbd6492c031aa358fc77eb7c3ddc449bc3dc974d68081a2ae16792dcc8d2c5a17e577fbe018a5734338ca4e949cad18a2928f1a70fc672268bafcc5e2d2306f48fc3c8e933ecc6ff13e878cbdac12c5ebd0f1e8f7387112a8aa647caf4e93eb852b9e4e4ca3fbd01e96610919b34a8f1bebb75fec57312048a9e9efea3e1165dd402e7cf6f02662172ba54ba739f7e3270ac405e32116003bf2286d4ed3e08d1ffa82f0243c9750a33ad38667f8b5a2fac618767ae44e70f421c1ea98b2265028fbaf1f5b42f51056c0393581ee87f69112a5169999c1416aedbcfd90171093151a5d73b7f01a4e31419c50108a911663241b68ab6dfac2dc701563c252c64858777fe2fc4c895feb0e058074c6cbbafcb542b2ba3b5fe0004ceade96b6de0c05e47866175a251c8ae8fb21eda43884f834cf8a597a19d172ecebc7c52fcd7f260fd8a568ea7bf2bc690721e14ddd5fe606245247f41171f9c8f84ad81dfd6d9d817363d38e8616dbc640758111de0d1c56c9617d3e36700fb8072f8103190d7e6ad01b71c2731c7300ce301db28afdeae29b316e01c9d0e5b9f9daa03ebb6b76b56c2272fa5658d0d259a96ab923ef0d59a8b1585fc520e1bb9f1a6a5325d9b4ec1a86efd68bae5547405d65be05c43bb3c83d276473203da96e33ac047c53f10cbbdfa6fe835cbaee50d7368840730aa0b4d0b6ebce727dce395c59de55ec33096b5375cd1e7a53010711a23835219ca00278ec3c8330e91f32dc5e4bf2475b75d2527598f310f2c81f363085379b37a471e9df60aed1ea2e8e5337935a2351e90ca80a1e524dba058b156997431ab5b1a944d3e598d0c09b52c6e7857c1d249faf194d7b322e58fe6de0af7011ff1e89c9cd47dc1010d4c4d6d6862537ffcd4005ca8a2c6eea3ddbd5a0551a7264d342efd52ce4feb213252c37ed001d4950c943b9414c1485b813dc8951e13bbebf59b09d0866a3606ebcd94240d9654e142dd3115a7ae0058fc366650e2c7f9ab7fb6e89f4964480bfb08f321e2f3d2095e265767978560b6d801dbd0e043f03f55cbf99da171602ec7fa754ea14ab15c43df2e84d17e4c9210bc9dbaa59e93824c286dd5ec49d21d2d30ae6638bf349ef0d80c4a491700b247038e146eee678b7b3a0c11906f1f0e6fccdb2a22ca4892736030e6b0e58d4e26edfb0f0c0c859d0cee42efcaa5be10f9de5f910b0f63d93d2edb32e82426b391a73666ccd866ed13f099052d1700215ec7ff0e0edec2a0c137a9bdaa40c2e2a74ea71b643f7d50c909870d4bd0ad2fcaa8238ce29d67fb0c3930463616b4fdf170b3952992fbfc3b39af46cc2a08048cd27d1e1c2f5204268339c8a52f2349dbddef3b27a24bded38c66d88ad7752537f3fe5f9858716ca1e18cac6e2bdb43a9c1207cdc3f3f01b60e4738263ddd293502f0a53d3551dd7ba1b487f0c786fe20d12a0925922a34d6579c5e04528321c06d3f949a65c0c6514aaa4667e1e5645f35a3ce3898d75d4aae31f1a3f47609ba0dcf6391e0b5945ae502874dd3e71f2a463e15d4fb5f89a4209e5efe35ea04426d392cd763f0b170a2f5c4aa99cda3c9f3236b62a2b5bc016780c3eae49723b09db28abffe1a876bc5c9cdf1a45713e66e5b232032657c60e69729cb316c09ad580b83e6eeb94756bcb772b7c7d833f70462b6c055657a5f071c8942929106cbdcff49386bc2a8ac5dfbca64d084602bcdf5b0cdebf70d542cbedec5cc800653db9e6c73575d23487102c9d056c3d3f769f36f23f1bf4330fe25b46a726e14fb59eb7edfb6f8cdedfabd42df0a1126613cd0e85396a8f4c988d4200abb3f0ec36e0c8976903d5f9aa59826323de035a978b1f3f0923ddd8949efdbbc8af1192808136a54f4191b085c8c7b6ce409aacdc2d04830edecafae7fbfbc6b31db155d4dbb063131345a86dc5c5508ab9dfa6b1a431fa9e2377669bba8a27dd6752d891fe5e13e0b431d235a6e21073643d4742fa99cbb02ee628b4cd4265407a70acc4271ad03e0098624a73548387d8d8cb6ac7113a2ec29f045922221faad4920e2155a000bcd3308a7a9c2333a945b0d38dc4b740473cda72c57e9e43a08f210fd728813b52a0a15b1b8299afb6e12150ad288b999f68d5fca188af8030e97000000000000000000000000000000000000000000000000000000000000000021e1695363807b5b8e5fe4108002f1f084612a791436f31894a3701b5955cf3e0e5e3aa84f957e5dab866b1ffc217f49e5015b149bc3f8810a981628d3cc7b5400000000000000000000000000000000000000000000000000000000000000002d00b586966545581e65d55686e08bd9d24eaf4e62e99a8ad06994ed916146db0fd9b8a73adae51b6bfb6116df37592a5ae71aa788828034b02f3c10d57b793217a182ecefed9f70d6effe1df26c684410a86ada2c0071d0d27708b32cba7ae400000000000000000000000000000000000000000000000000000000000000001a6b732f7d408352c86f17e9d4079f61b6ce7b88f4b985f8008db247fba86c891c006edf8537c227aea09c811d3f742f021bf9b67ea472dc7ffe74b61706819000000000000000000000000000000000000000000000000000000000000000001fc4f8fef2fb0f264fd63f87b36b2be1c024ec0a7926f6fdf381920a5440aacd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e8107c05a941ec85c276b7aefa026a5ae5ba1a0ddbe56ac55ca6d927e2e9e612b0567e2f872b678f1ade1c761c8ba538fce61b1a31e90b2530797f3b6ad2dfd12803dca34196eceddf7330ebbd40dab111d17db278072d182eadff9a762071a12803dca34196eceddf7330ebbd40dab111d17db278072d182eadff9a762071a0d2914bb26c77845ccf7a67b3bc64d423f5845799fc2b236b80516f80824c1f612471ab3c13896b2a2fee2adc5aaf27678b5482241ed98362aeb03f994ea19a50fbc98034bb0599202a171956cb488ef55ab69dbb8aa6368260105b4851e1a54208c7e421f879edd266910a2caeaa01bfb2bdc531ac8146176b72256dc4607981239b3f73ad8195211fc51f1d680bf58b7b5703f8fa24d64df2b5dd371c8770906131f8c45ebc5b4e289e779b1e07a5f806477aa572bfa838a938b4c410a1b742359b99c08575849803148ef657de059c5340fbfb390a782d50d6660a23ba0ea1b01ce66c2ee707cd9b3b9f5c018f29833ea320199693f900f4bd5968926aa8e070b2f180acf96bef51e1ccf72ea545ccd7c01ee7ec5101757db8d81de001d84095a69bd2e57e1d262ffc29cdfbbd7041fcd8de21bf78b0b44fb04c694dbfd2e23d1f48740fb326d93f981766e55826f09325eddd0b1accb246889539e6edee91d9013e2fb4048a2a0dc3f494f8a8a14181eb8881a42d28bc120c014ca2e4abf1edf89cc2ee6eba417a215f82b5b7a27a37d43f39a33d09e1f6a43c71972fb9a0565e015fb49f190b051e8b4afe4c7a13d568f467462a4947a8197a9da58c4dc0acf1f2e0c1a3cfd03640fc6033500a23e8ee76fc01275d155f3259347db706f211171f46b6a370cf0de1b547816312c6e384c6057ae6d059260c44c6700327104091f6930cd310e6995d406442abbbb43c3ab415b28d593d2f5d347eb2eef632bd5a5aff4b48f5af2ac31060c2343b51f381f36b86ed3cb23c72ce6a729ba9a17f29cfe3ae306e671585e72198d43c66ef649182fa12bfc53df877f8f2dbef229c114d7728e3fa0f1ce7ce0b3c74a1f0cac6e5d8b2fb0faaf590e2802a0208d0626b66f44ce65a61ec861b1b8ac347e40dceef9a40abaecead29e62dde29a6b2e1f2475e14cef1332ceef01395d84a7568bd7c2ae6ae562d767c3d4bc0ba5a01b253723176cb043246547a62787941dc4293cfaeeb113609f1231a7362e0ced05ad5ecd23a886dd5acac05a1611a87bc05fd34fd8c06aac568dcc51a09156442a3a2c63e528bc35b099aaf169b36510e258a59441ddf960625de0d1f8fb3b0f2e7a53f17074b8b3bf77aff7db4d9fa6a2c5bfebbbb543888e44e952ae315d4a11bb023db9f817aa0de37c890ad53e8d96c309cbb6a282f3e714ad5d1d2a7e541ffffb062e7f20ef3c463cc6c41a5a5cc3b899ba4c8061af7f97e9d770638217155baea530ac1de57cad2118bbe2e43edca0fa234420679e723abd34ed2e4ad501ab70da1716021892df4304b1899b1b31d623d1f670d22db320e7e5628c3f130383fa7605e2668b347d7ab6ee54ef3914b8bb6b94f4315eee8ad1775c63b2bc', 'transcript_type': 'EVM'}\n", + "Time gen prf: 0.9824399948120117 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [0.53125]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where/where+covariance/data.json b/examples/where/where+covariance/data.json new file mode 100644 index 0000000..69d8020 --- /dev/null +++ b/examples/where/where+covariance/data.json @@ -0,0 +1,23 @@ +{ + "x": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99 + ], + "y": [ + 124.09, -37.12, 80.21, 62.13, 0.2, 45.79, 49.2, 105.68, 159.44, 135.97, + 141.56, 64.51, 9.56, 116.33, 8.94, 70.32, 79.54, 33.52, 123.45, 79.17, + 185.38, 113.5, 32.74, 204.23, 130.27, 76.63, 106.42, 191.19, 202.93, 212.26, + 146.64, 161.91, 203.84, 160.09, 124.31, 200.52, 220.17, 117.14, 270.71, + 232.62, 152.37, 137.63, 145.5, 290.38, 210.03, 305.25, 161.26, 213.92, + 126.23, 166.79, 174.66, 252.53, 229.94, 307.21, 190.17, 250.22, 215.2, + 196.0, 195.61, 250.23, 318.48, 235.65, 178.28, 200.54, 293.78, 243.95, + 319.72, 255.92, 313.52, 376.36, 304.54, 327.65, 317.21, 413.62, 400.09, + 347.71, 333.18, 302.64, 308.08, 430.22, 268.85, 367.58, 402.2, 274.01, + 460.27, 442.84, 280.65, 448.93, 345.64, 384.94, 438.06, 457.26, 337.6, + 303.74, 345.57, 494.38, 450.31, 383.49, 353.11, 392.61 + ] +} diff --git a/examples/where/where+covariance/where+covariance.ipynb b/examples/where/where+covariance/where+covariance.ipynb new file mode 100644 index 0000000..2a45cbe --- /dev/null +++ b/examples/where/where+covariance/where+covariance.ipynb @@ -0,0 +1,240 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# note scale = 2, or 3 makes it more precise, but too big.\n", + "scales = [1]\n", + "selected_columns = ['x', 'y']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side:\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x, y = data[0], data[1]\n", + " # can AND condition! (same for OR as well)\n", + " filter = torch.logical_and((x>50), (y>300))\n", + " filtered_x = s.where(filter, x)\n", + " filtered_y = s.where(filter, y)\n", + " return s.covariance(filtered_x, filtered_y)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 1, param_scale: 1, scale_input_multiplier: 10) ------------->\n", + "\n", + "+------------+--------------+------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+------------+--------------+------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.08456421 | 0.16912842 | 0.16912842 | 0 | 0.08456421 | 0.16912842 | 0.16912842 | 0 | 0.014302211 | 0.00025573664 | 0.00025573664 |\n", + "+------------+--------------+------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [1]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":1,\"param_scale\":1,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1348,778],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":13120,\"total_assignments\":3317,\"total_const_size\":608,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,1],\"model_input_scales\":[1,1],\"module_sizes\":{\"kzg\":[],\"poseidon\":[13120,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709724643678}\n" + ] + } + ], + "source": [ + "# prover calculates settings, send to verifier\n", + "_, prover_model = computation_to_model(computation, error)\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.4659230709075928 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 330.5\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['b8c4693b3424042141e265e5179743499536c8b9f1ddc7d4d4fc847c1c09df04', '7d055c183092753c601560dfbfa0b446f5417438227d99435c476a0659de3d14', '0100000000000000000000000000000000000000000000000000000000000000', '9502000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1f2cdb3c1a98ca9febc6508ec1fb81f9b428e1f123b7dff72e3597d7195beb0000014197b88d8f5fc5dfd8aeb29dab05169ab1bc9214e763bce3c0291684efa92468ff4c9ace3b9e1ada390ef08f83fc7bcc7026c5541bc45ee5cf9f3a2bb23b0b9a064b997d78f080c8f6c076fd824c2095c89f418d51045874a6192aed72d4219f6fe9b1fbc52f4b93660b42444220116f8fc4a03dde7433ddd43c2f33d5cf28e13534befdba8d0d964a11cb9f2ba48ec684552c46f92680c98631c5098f042f2b76ad2ca25e362f67e755fbdc5444528757dc86a58fe5b2bdca5ab35610b80f72cd7f20fd25a2817564fb930384a5d2771bc22370d5d16f67c1349a865a7e2a6816cd0d642a3c9d7ccb9214da9fa5c5ec46835fa3b5d47d1d2588f161c73e150e36c4bce04c79117bc7c8a1cda6ed6342074cee84caa57769f218fb20f2940b84b490ea7ba73b8dd02a1f64ae166d84db081fb4de3a0509f1caa836541e8a12ca95bd7965ded3889d0c35cb55e187ed525ff489e6f92def5b0d89ab774cd60a0736774d6f46dc975dc30342de75788b231fe867bf38ca2b6fe09336c74fc119f512be34789bad96cd71280b1ad75dd76c3b64a241f2eeab9eee73bb96775502ee43817fb64e55b6c97b0bfb2155cd7d5a4dd8e5bc7a792259da32a21b49bf0924b9a094e5e15f6be610dc844097e6afa8d57e434a0ffabd3b20840086880822309a28209527f9100e5c09fd0e3d45970a5d3d14e796e57fdfa18593f0992528ee2c5818c64d9ed0473077d380d99c55fca43d4b71f658524f6386d9d7f4971a727a74d5f2d0751253a2676cbd3c3516b549523aaa93c072946f4cf88a622e1111ec7328ef7ebe20b9e0c9d92ab9cb2111d5df228e8659e053880b987b0f9416c6c2631756f31a8318861a0947009b23daa4816d6aa43a3ba096fe199e70ef1f29175d64128dd25cc1f66cfb1ba0e3e307dc54c8c8c17e08cd43a802a85b65298a654d35ea7593d5208a7a58b5816d655e311bb76e1626ed945aa61440c6eb1c4e1e044dc4555310b0a6fe6607ee9bcce3e4d99a9c3c1a1f091474c85a672b08c95c7079f5a4f37d1c275f4b3a24ae88665469051e3f34054c388976103cb1082d1023dd4040696c523ad510fd8c71658e535e899c165ee9f918c11ce082640340d5ca2d635eec3e7d971c738df8476525ccd0455a76bfd75652f270863bac1091947a6c3921a487c41ccbee5d2d90562553f4f5ef5e6aff04622118f2fb7810910182078fd9392bcafc3703d11ab8b145b3b9bf879f7a884559019b05ef1c1345dfccde036a7adfdb2945b2cba43ee589154de3e1fe71bf2693b815c104cb1a50025c4ab1b04e6559233e5fcd2e50af851f9ddccd4990f82b04d0b2f4355f0bec1381d1077169bd7a8f94ab38290ab53657b537a1aea82d08385660873efe2876f4cc4afedfaa2377f2be535ae1b57bb2b620e7d03dbb9cb6ab1f22b5c36f27b2f028880d7f0881227ea86aa5c5be28d35b2029c0f87341dcfe318aa794eb2b173a22d0d68a77a84afd1322f25dff79389dcc3116bac0612f90036f7384b50d7e63c0f8fc1c9c539c9b9ad32fe6e779b821a285a812e4028a9dfbccb5823c0410abd8f2f2d151ce326d79d1ce3091e2a977d87490642f983424f92f13d23c0eb22d7a834a8c0e41ea1c099066fb83c6723f58936c38ea10a07d0d03e6006c034a10cd315abaa0e75891ca47d758e0e8b34cd5d208ae4f38cdf9a1eaecb88a096f312c304a31bd8536894723bc5837df1821222e0e5ef0ddda9c67cad05808222ed1483857421f6f8aa0e1536dbfe5a51f806b11096053778cbf462af13ef915a8fa981caaaf46b05bbb4d5a747c620fc090305802c0fb699d53a63830d98e06954a2eed6212709bce72daee249d99835cecd4d8fe89b66e11c6be529b496912220c33bda9e9754c24df0cb8e8b83df714ea5659629663d0b926862fba70f62f5108c01a2a62d62ac98464ff8abd6ee71d9595b35cf3e0cc54c6a044f94899138f7148baca89493bee08452eeaf5577ad9d7d0c0858b9bc980bf3af86ba85b0c0c8ed85210f0251b0ae7e8927ca4f8d5c7c09b1daf6485142f9b973e592cd713751e4fdf3f47229621171798c35be9fad6963afc1bfbd2290804a6d7e05ff10913ad0c07f7b2ba9ef3cad6877c926aa7cc7cd05733ea6835db6e095272c2af09651e18b46610b4cece147b7b429bfdd5330f4cc438b1707ec7dda2a05107b613887dc7b4586e195fd1fc8073b8e7b2a318ffa62c6067121225e17b1c51fa542c84209b5a76f6c34a26826988875106d837a178e8df892378e8b522b5f795911de65964da9e5e45bde390983ceebac6513d74896ca7065f1d1804323c231465293f12c0abb7de400938a48a217aec57e3f7dca532fd176410a1f5de98762dd0235e3c369c363cba3fe981414c1660c7b77f466d93642f9041d71d56e725f8be2493c2d068b4f1d62b5385f6aece213cad47b7f820ff09a154ec126ea3fd4c2c1de2c5e4821955adcf8457ffa3a21c818c6b718bb7946dd8c09d449935aac9812a76c5820d9d21cc211b30a5890c23c529e9094c463cd1668c8eb7ca2cfb7f5c236d4ed91cb1f2da9fcb15eb47d2fc4f738233757a0253c9cb9c5090fff47dad24e22116f5803da315a5aeeab1f3a49c6a36a31e5449368f047f107b847a156f0347b916aa8006e308b2c14f2cadc1e7192d97cb0aa32d5b742cd44c0d3b345e08c15288b3208483b6fcbed7c342d38afa2e48108170ef2e17e34828e313ebb80ad7baad3d33463c706a405647e631f5e736c961c3b6bcf4225dc4369e05462c2b4325a84ef536b75962a548f38b52ab785ebb9f259eca79de5dc12dc16fda401e59ce0eefb0dfe3f2818a5b3fc0c269b01e7f2d84492fbaa23dbf760cb9e4561d584922617c3f14225917130b00e2e4ce37535fabd2f670f3c00a6f87a77848132294ad69e7865a6a39da0740d699ed634d116c480620278af52aaa61bee7622bed5830ac37e8746421a45bab7b96c0978d27503c1f0500a6707046a0af49261b763d09d8d1b13c321a013e677a34f55df3eaded49414f40233eea2e05f49ca2e7fc4dc79da239e34f91157bd1188ad3e09b5751fab0328601a43997a8eeb3700000000000000000000000000000000000000000000000000000000000000000ce7e1b59c7e76a2df4362f405a3948bc27958ef6baea4f71e0026ec41fc43f114b62624c6dfde023e36b1f511326aebd0a73514cd905a5485af86b6183d617d00000000000000000000000000000000000000000000000000000000000000002973b045ae22ac00e8419e9b2f89f7f3efd3bd890b1323f5409505e489b8cfc008f72f4c8f0be5efcaa1fbb8b53a4b103c9a3a3090bf17a05d6a74946383f90e0d2dda012a1ee5ea184fda362267ef64d2322091a17a9ef2f0af7ed07a8f5cc4000000000000000000000000000000000000000000000000000000000000000024b728d453761dfdc6c926bfb5188b349607e664118a99f9b9ba9ca18303f8321bb61eecca353081a5b52b498e023ca3adf247e4934aa45bd9a5143afd79009b000000000000000000000000000000000000000000000000000000000000000008bc5ce6d46c10561976fe1aee0f8ad5da667ab3aaeb2ff122080c544f014cd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544cdd8221222e2ebd039cd1f89f0d5ca742e7b73361e0f294365a19efb222b029031996d9e202ddccade6ed59b5291833a225af87aeede23e56f4d4ee0d12315893c18e20a65ff750deac1497c9f72ad76cf6592342f84049c713cd2d36f7d15893c18e20a65ff750deac1497c9f72ad76cf6592342f84049c713cd2d36f7d1de34d63f47226aacd528b04ccb0d1c04872ef4bd1695c9c5a00a6e382bbca9522a5c9689b3f593e571f4c2624b324ab96c3d1239dd2919823736d21624739fc1310473bc4a5d2b6b340bbf50f57209b0e16c5fe8f3e606f3538a3214e7f9ca41611efd548ad486c885710a5857b38ba3c4a91790f928a443313701fe976dd250fbb4798dac8a51a7745f356e59af8f2f51ec09b5ccc04a2af125bdd3db4175224eed9ec49ad7dfef470a1e520dc658076ca702b4947b4064e82acd0dcecfa641b2266e9c8999e5c797ef060d992c161baf76dbb15422cd410e8ca4423d5832a090805a64c5789ec3521e6ba4d3e043cf7e5cc26f2289d5f6fa5e0298e8a9cbf05585ae08c809b09ae14e1ab5db17bd898faeaa749370b550149bef5867f9248074373b9488fc30a853395d573096446fe6f7dc5bc57cbdd549e5d3dc858ae220062c097846d012544d242c676cb6a2591e20f5d6dd357f53ad26ed7fcd635b128f1a6c8c8a47fa5ca2a1b2453cd0c05ccc7b80a7e6c8b0e2d0e4be76538490018313f6ae056202ee99b74e3afba52c92cc7ff4f3648cfc2160dcdf9d4ce2a1d255f7597abb0e746f35aab46b7001c1e8596316628eb744bcbf326c3add806262bbf4eca62e71a75a37a270e9894a546135e834de919eda7ba403daf0cc1b92a2eddab5a33905bef99cac86af9dab5b12f4edcad103e12d57e27e72e600245bb1208ca8ee3d8de6fa2e7bb3133f92ff979774fd2aa99be4d9eb3a780ce01c05909bb4eae4aaae1d29293ef77e16f66d8b17ed2886c42e10bbdd14d726dd551591cf0dbed07c33c9d36b0436a497dad9290f7a7a23300eb66304672af25863380296ca8a9ab67f1cc407347f9cfe6136be88fb58ecb28d2f30123b58d676b483a13c6fe09328da9fa9516c5b9fbc8a316392f5f70cc934f144435c52b700971e02a339f11fa118d7791796ef1a416495c3246d7f6227e92d09aad1c4807e2e6f523a439071ff2be2ddffc3b7bc3b51661740d3d9b528b876fd3aa1df405f924880e613760691a07ff1cfb871aadec7f099158563fe7da098d83267982754656ef24a5ab06323adf22ae43e6e944d61cbdc012f8a61c55fde44a6e2d25079517bf25336604637937af33e61ce4b6d6f7e13b2a41c5b221225f693d67f39e2d62ca265b6ebb280e9715093f45cf8d9e81bf2bd1935a6d0b3c555d39a47f7b15d2ad0ddc6a9a95f4d7e6be0afab4dfeeeb6f62873520740a5ab358c02a1c0f3ff9a10ba35981a2687bc3e5f373f9422f53a1b559c60e189500215fe688cb254102b61806f98e4819692f2a682219ae7bebea99825c7447b0e491735b48240a13cdfc2861fcc6f144f0442bd6f6e8c9402b856668c7bc615d75ec06f48f299ea740e1', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.7153010368347168 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [330.5]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+geomean/data.json b/examples/where/where+geomean/data.json similarity index 100% rename from examples/where+geomean/data.json rename to examples/where/where+geomean/data.json diff --git a/examples/where/where+geomean/where+geomean.ipynb b/examples/where/where+geomean/where+geomean.ipynb new file mode 100644 index 0000000..dd459cc --- /dev/null +++ b/examples/where/where+geomean/where+geomean.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [8]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:122: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " return torch.abs((torch.log(self.result)*size)-torch.sum(torch.log(x)))<=size*torch.log(torch.tensor(1+self.error))\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x > 20)\n", + " filtered_x = s.where(filter, x)\n", + " return s.geometric_mean(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 8, param_scale: 8, scale_input_multiplier: 10) ------------->\n", + "\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.0006465912 | -0.0012931824 | 0 | -0.0012931824 | 0.0006465912 | 0.0012931824 | 0.0012931824 | 0 | 0.0000008361603 | -0.000013434931 | 0.000013434931 |\n", + "+---------------+---------------+-----------+---------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [8]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":8,\"param_scale\":8,\"scale_rebase_multiplier\":10,\"lookup_range\":[-2560,34816],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5411,\"total_const_size\":1205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,8],\"model_input_scales\":[8],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709690522834}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 5.909601926803589 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 48.12890625\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['2be46e82e2e0c1e79761a98c6a2d8eae08bc302d2618f256d97907797f4b4219', '0100000000000000000000000000000000000000000000000000000000000000', '2130000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x0b80901788e79f83211011a9bed19f851338bc4a36bc0decaa27f26e0845f95d279069531dc1de3ffa48f6d43bcb72fac5aebc91641c014638efae6427b11f132a22e449448185bda0d4e1b106eee9b6e4946ccf9cb33b9abe3e345c9648d66916db8389c8837bc9a4662e7d307936aea3174b229d7892e811492676d9893a890f18d9f5ea7f3a0b8454a5792eb7389720a61d7c2150b8cbcbd4d760ae476be21c001d1040c3d61d474bc35e4c43fc31138d4a28120ab7326913177ab8f826bd249ee4e15ed0399dec3d7654312a4ed5ea460c4fe7b72666928fce1947946adf1cca326db91eecb3d11b8da2b8146ea257513e3fa8f26b328bc4026d94f5a5c40fd34fd9d1504efd890c051367eb08bb6b09a033f7eea95b7fe5c0fd10cd1aee05ec3a40d896db63ba0e86e0b8b51c3d4e11d2008b251d95b864989ae977462127907f4603491829f11e15fa3ccfed1cf130b85073faa1ffbf8d9931c08686911fc4cabfb01a433ef452b7dc32d1e571df1c02d88820cb41824c8742e7927c1608efa3d51a0edebe1c9536d4367a7be7f2c6007d231ab456a86c847071f5f65009dbced561f540a5090d62cbd73e747e08b9646b5a192ed08d1f2ecd5f0e8bbe2b89646349ab3bc3c703668441a57e06efa2a98dffed7fc5c996d14729fb9f12183abfd18dd40a4ed178dc0cf23f2a95ad5e5a21fa0259638076c6b2445c5a3a2dff152bbfa4bccd115a1ec805a82851747373792c57e57509dae04bd4e429cd2708ff3bc9abb6f2657ace9b7aabcc6c72a410ac38c91ff9a6c51efa5157b83e16728c6f2f061bdc6af4db40262cf519a5c945d044953973d5c662a59910bb5b03777ac8432a220878ffc36e020d0534e0294f7c6613595dcbb261d83ccfc6861bd5abbc6d14b5d9fc37dbdc46a418ec61b442acf0aeef7ffa9a6b69a7ad65f7235c4646d821e28fe3a13f7e8dfa6f6230e374a2ee4df4565a9596ff2ae933742c7927bcce749adec87f4cb261a08362c26c309deb9afd5a88e1d78172da0dda1bdc135eb1a8893380ca7dcffdd0c2b878ab43c0e2553196c577370f1ed2b0ae09c768e12b1ee4de4c4d376d2cb6cbf11de5c98e075322e1528eef6bfac267c3225fdc3ff88313dd94611b2d1f6a8573dc5a30d31f7bb38e9ad2359d4586a2f904628cd31da97ddcf32ef42cdbd624f3b9143fcb9ba51f01c69a6b1c28460d8117ae6ed215aec25344ed54bd4575a629f29dcf67822e34e463a6cf0c3570ca531cca7dbda0ea4c04c4ad7c0a9740d5953ca4356d908a7237480dae4871e5295024cddf4c0a446d2ac99f1323181f06dbc705c7d93205baaa98d0d3d8b19c6253044d8ed7f17309df8703d0d9814b95d23b667406d1091c66884fe03712ad9d5f24efca4a0eb7c6de55d4b5bc94e1d3918b4757bb6d567aaea1757ccec5880cdb3060daf31221288c45ea35d9e29532bfcf6836f948d120320299b715c4e4527d119bec6b0b531bbeb5a1ab894e488f38b514980bea1589aa6b926ba6a2db702e1daac9df010d07503d14c8987b9099027374c90d64a5a6a5bdd492aaf02be7ac2e68b554db250f579c556c0a0045f953fd5310fae7bc4caa244d4410b4a28f0117bab6c6721fecc0289a3e469cbf504396d3f766d75ec70682243e6fabca346d0e07472bfd843ebb972d6ab879af90a4ef69df64c749a9b856ced3f7ce0e821e12f59e07e0b9aeda34347e15f71fc9ece85244790ba77e52e7c8c5edcd3113fd303574ed2e9f30218f5e9716ec51e8ff9ade2edcc0ad0f07c32001782c8f3e84274d7fee75dc7bf3be5bbf21224104b93b8554311ea70ee5dd000833da87de02235a714275a17f8129c8822658cbf48e0315a881b4b6aff3161f2ad8928010f622e3b152345aaaa4887e12a45a792aa1f2b41d24fc3b0a5b9a152fed4e3070e50431548fb04d230174a0c21b09caad931ee103ccac98d75eb089f87d1ca08d0a27831fb1c528b06e9a29d36e78af316004a9859846108009a1f8829fb9c6df4d21f090c59a865bb10a700dc4806f7316da47a17bcd38d559ba604bbca8e7fb4211fc57d969c3f8c17005094e2318e37f4341919720a2aa2df06381594de1e34e2396d99bd93a142c093a97a145210ada8049e43a88ce132b073f6b024e667edf10cd91ab08b03a72037269b76ac8ce40129a41c123c681f165d3c0ce1fbd9ed71eb5b0bd152dc5da6179d28014df69660ba81205ab7e0878ba786a80ce4a7ab00893987d6606065ffe5b20c351687acf5ef8864384c1b6ce6ea8a67e465e33372467d89dd161b0b254d420a9797315876eb9b191faf7e8841198bb6c4a1d873716f841900b8022e770500d0bb6607212116d909cb3685f2f5cd648c70e77f0a2195f6da0de36a0ea61c4a57c4dd3815efa307d3f3784b822676d9735c76daf9122d1c6641a34685dbf3ff77233fd01b2b5cbac5087cf81286060003a4fdc405f2035879a8d6a1dd0add8ca5d9096d5ee9bffa73a10073924c1665428197f7b6710aedd91b1268290c0cdadf25a58e5c1b90ae4d7527f12a25ea67462de70fc0003374fae6e63762a6b9b870a5df828cf84ba82f95f186aef910ac7b47afb6e6008660db20016b36e6d0e636c0e7224e84216ae79b66b8c289fc39c7f00778f9c0b1e63653e191fa7ba3575d2d8ba611e0bd94cffb344a41efbc36f53b3cc3fe202142e9f60d5b8d566beab12f13e5a7343142b4289d9756f81193a6333bbbefe0c15c0b9238a2957f985344b0e536214f81016306501d2732426ee87dee889d62f1242ca2fe51b762067a53a3a82d03ca75724bd043e8decf007aa6c03a1f32b28da9735900e6e934636ae96b4134ce06ea1b3583ac35fec9354efd69b348fd20e6c7bc8ea1fefb522d5163b929f27e13372e616ab92fc08c79c820b1b9d0b81123743d0543f32d9f30b2170f519efde5a91129cce4986076db000b7bd60e6a228afe14a0912a38a58d81772243983ef8da230a1e0987a62c44b5c20c63a61f3184bc8f2d49314b825f367e260c9248741b805a319f3f1c970a3c658107b7ee90e8aa4d0587a17125c87122f1d440de582e33b9e66f1e614f8c9a84be06743c324ceabf13cbf7a8e107c0e817fc6f2456f7bbd1a18f12a1379dca0f63cc339d70000000000000000000000000000000000000000000000000000000000000000142af1a009684d4f80fa80e644764cfb825930de225cc9c7b652c53e84cad6131fa062776fcdfd503a6e0d91e7ae8c3da351d648a3b237b9e7d5c81901a67783000000000000000000000000000000000000000000000000000000000000000008409f4f61ce31e21b7b37bb9cca8c30d7b419571c8d1cf316d8ea506003bc21174427a593adac97efddaa7701766a203c91d5333f4c4adac31ef6f6b482a0432c8949dfdb1201eb882b5522195f44da2f4e8f586662d25a24f3ea1b6ae4516c000000000000000000000000000000000000000000000000000000000000000008d56c91f73b0e1788a82330c77719c925ca6a4ee82d92e04ab2ffe6ba8ee4a3243a71db57e17ef9e411a2f208b7a99390ba83f2ec6ad13efce4f6242b31776200000000000000000000000000000000000000000000000000000000000000002b8a53178334a9d71282b8d87ed56cdd94c5ae938f70b982403dadb58c85e3e30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115cf944f47ffd2a4455f3705fee8cb3cf099f43c7788533d203dbe3b6e394112114f8f7958fdb70e885e13767821688a309b57e16ce5446fb16fbc981975ead2bba4579d03f643829fb97ef0e13b2a9c390162c9f3f0c112c72a59bd1bc05142bba4579d03f643829fb97ef0e13b2a9c390162c9f3f0c112c72a59bd1bc0514030f92d9e379b003378dfbb53fc29db8e856095efc8f861fdffedb8c0e0af5cf01aaf5c8bb1f72d414f6d201598a8130129f68e18af1519d19ebb327c449a95a011555815cfaeaf39915667adb1bfbf11f39849def59ff97589a5b5076ec29a1226952d9f2fdd15b6dbe2392daf77d032b71516c2604f89829531888bbc750e606bfb697ff3d991928956e61289f9698b405cc18c71f15d7c15641104585509805a819d4dc0715272f0facec54c17557fc2d543a83614a57e4e7e02279b9b0ce0cfa5a0d2122445373050b5366aafcc11ffb991ad93645deeb15dd1c9a0d5cb501958399c5e12965c0cb32226e0e7cbb3e916ffcc430e77b45b0dc723709a8331b400bd3e44c577a75625904bf3e4e9c827779372fffd039fe747f4af0ef882e1baf7d1082f121919e03004a9fedd430a5d7731f85180ecee18da925fdf9965b2a9160e3e9f09763ebfc5b480b51f5294bae5833e7a03cfe13eb12f92a4733231563ec443bc7334bdcf091be27a6564655a10ee24c3ff1912962455c0a329a251f14be57b18fe6b5acf6c0ab2c76210699737c6b01b34fc95738ffd1775f92391b30bffc2167bd783984ff326a2e0b05eff37fbaef7faa7d1c56397d012f1f3f2932533ef85432ad4c46873fb3fec62c06b817115eab0b3dbd514b82190b3de01f69f5ba74dac18111e76f2cab05ed1978da1c56bc85918e06b3959b7be38ef41f0f73154420456ffa733a64c8866eb78a605ca7cbc959d03ad1f1f22db2b1591963ed18d0a62f48fdca517aaa291cb7af1801dc5a5f1c458bbedca807d8141e2e16cbcc7f71b65554e362c891214e6cb267a47b049040bc39e8f5d07b15f8011ed57b8f9bc9f9347f5e90694133374554f59dc230b9c5df8b1d675325e6326516b3d5e149b771751a773f342efefdab6f8b61ab10dd625e5a5e74c119be84d72f9313046691669cc62d236309d6bb181a0039c3c2fb2a22383ce0ec772eb8442e40923540f1f0e5e6fe7a5a6f911afdd76fa6206eaab6cbe8349bb085c9e5ec244ca9bdff724f599b1207196d5fdf18781e00dd9c1638acd765010b1d0011f406da9a984c6cb1bc240900670a92adabf4637d29b28c50ad7266807ed9dbf1bf18bffe4ca75d0895abecbf4df80fe400aa90e08abe03c4a6169620ddb97f418f27d890dd785ec6ecb85f82fd398b604ea2f062a8ff6f5baed6c1638baf422b3901aebfc5f322422bff74ae02df933286138e2ecf292c23074ee464a6848474d411da9c57d0b2c3a4ae45930848a7015738b72132490230e108e719d3ef4145cb1407add3cb4df584fa08537847a8a7a4daf170c9ff8a78894972989bad35e3030d844211805e7e21f8d0ca0b6ca90b70447780febd7feada20b62bf502bf39ce', 'transcript_type': 'EVM'}\n", + "Time gen prf: 5.9554078578948975 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [48.12890625]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+mean/data.json b/examples/where/where+harmomean/data.json similarity index 96% rename from examples/where+mean/data.json rename to examples/where/where+harmomean/data.json index 081d2c3..eccb5ba 100644 --- a/examples/where+mean/data.json +++ b/examples/where/where+harmomean/data.json @@ -1,6 +1,6 @@ { "col_name": [ - 33.0, 15.0, 38.0, 38.0, 70.0, 44.0, 34.0, 67.0, 54.0, 78.0, 80.0, 21.0, + 33.0, 75.0, 38.0, 38.0, 70.0, 44.0, 34.0, 67.0, 54.0, 78.0, 80.0, 21.0, 41.0, 47.0, 57.0, 50.0, 65.0, 43.0, 51.0, 54.0, 62.0, 68.0, 45.0, 39.0, 51.0, 48.0, 48.0, 42.0, 37.0, 75.0, 40.0, 48.0, 65.0, 26.0, 42.0, 53.0, 51.0, 56.0, 74.0, 54.0, 55.0, 15.0, 58.0, 46.0, 64.0, 59.0, 39.0, 36.0, diff --git a/examples/where/where+harmomean/harmomean.ipynb b/examples/where/where+harmomean/harmomean.ipynb new file mode 100644 index 0000000..0424cdc --- /dev/null +++ b/examples/where/where+harmomean/harmomean.ipynb @@ -0,0 +1,241 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [6]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side:\n", + "# since have division, scale must be very LARGE, cant use just 0\n", + "# So, we allow error rate to be 10% instead of 1%\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = torch.logical_and(x>20, x<60)\n", + " filtered_x = s.where(filter, x)\n", + " return s.harmonic_mean(filtered_x)\n", + "\n", + "error = 0.1\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns,sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 6, param_scale: 6, scale_input_multiplier: 10) ------------->\n", + "\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.002811432 | 0.005622864 | 0.005622864 | 0 | 0.002811432 | 0.005622864 | 0.005622864 | 0 | 0.000015808298 | 0.0000680693 | 0.0000680693 |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [6]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":6,\"param_scale\":6,\"scale_rebase_multiplier\":10,\"lookup_range\":[-3584,8704],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":6311,\"total_const_size\":1205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,6],\"model_input_scales\":[6],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709725247359}\n" + ] + } + ], + "source": [ + "# prover calculates settings, send to verifier\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.6231889724731445 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 41.296875\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['c371c58876874ace4444c2f2683e0d7bb7ce264f49872aa6deab40635ed90f23', '0100000000000000000000000000000000000000000000000000000000000000', '530a000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x27bf6c0540c09cce8e98577e66d4c6f88834ad74323e276e3e4179cd4990daa82294aba9dc197379b5675b348382219cd8c6f21891ecc83262d870999baf6b512850ec9670f6ec2291e5a1fd280b978773532e52aba0b164f37486e723e85be2289778069321bd63f21d3104c40da578c10c91db117f8b96c1c8d67a48980e4b2d0642ff893ab6a3ec55ed037861f83952d7fd25126b61fbaf66fe3d5feb9cdd10987c68c749e76db00ec1e693e8433de79215ba8da9c0d516a1290cb8a75f1e2ab39603966afe8c340d5c95a91d9ae0c59386531673990ac62bbfb6eafb80cf2075315b4e351db72544961e617ac721f7e88e9b6486cd432bb87638d659dd3517ef7a1935d794e503f5907ec3c73c620c175afcec8050ebc76b6de4b0d6317b0af339b462a84d2e0348e5d29158712637005fe59f7f1604ccf208e0b1c84d010f86a324880d9c5494e6b4df712a7211cfe2c48eef79814b32bab2b744005ce10b313957e3a0128df2984a64869dba451162ba22fe2440e34373804ed2c2d7ef2a1b94f077a726ac49c3478470c3077bf99a5b4d65ffc9302ffc73885b5bce8b15d6f766045bd8e95ee4a1727a08b8751f58b78eb3c0b3bd12187abe1369d05f1578752737dfaee0feb7d716bda9311ac63ffd1ef0ef55811347ace83372036c16fae1ed43ab9e9aa83816e163be44cfd73132a47ead5f9945c3c846cdd754d71f875b1729f0ee2a938927d770bf4f6b4d75358eea2231f18c149689ac95454e2df4566cbb19ec4fdfdad8c6a9aab813b6b8faa25d2c30cab1e90418c544976e007754e432a0c037741c0ea77c4c6a42932c668ca629e1abca4288d9b3bc5a89042ffd242d9915f28b568c0160a9f686eb933e7d315d60367d7819546dda563326de4a439450305208dec01c8240a2a1d7c52884c39a3309d9e2448315f936822c4ee263aa62a83f3425fbc9c184c30508ef3141d493d120b0cb553ad201e74826450f356cfbeb1b38ecfe987ad469dc18b8294ecd35fdff57370d4b26287c2a17c62540b2066da6625e5e6b1b94dc33ca9180553a1049e1bac26483e75132371249ec0a5028ca1eb632864b37c792cb28db9099fe55257745a532774a739dd90fb227a4c7329e56d83d695ed01e15f9d0e57bf9e29cdbe5ecd5d2b7e0a6f7e02567e635271cf61ec28fe5faa77d9d01ad1e26652c06c8b4aadefded9b44903e19f37bde0190dc28cd69f190537117eaca51d4a7f430d50d42ce6a12a1e8994c2f97e9336856feb3b8fe3da325b0a1b22d6fe5c6da03b584dd36dfa527ce02f526dcc427de2f825e32534961191b27d3b2ea3057a29a70c7c1e202e3de506a1f0f30035816c08fd160315ba278cd0cfcc37651ff9acf4092a613169ccd4c1fcb2d0d06b10f10281e9548d4906a3836f74a5b993c7fe9b378cb759611ac9c3c2503ae55b73ee13351daffa9d369b4936e4635c566a3f55db804d5d82baa2c12512e9fa631de1d7bd0ad74032d11fc3891097374301c1788c9a998fa671d36970d0df8efb7a6374dd1cb95d0a792ac7b3882d79b15af16de1022855be642edc1b508b718b5b8cc0f9a94bc101f484101772b84f35ac0024d38a51878737f21cc8214c4f01e30b7d91a681fb7fc924b4e29b690e75e6a8e646a28b3b853d7dc53a4274558301cd131b86079caa546f36e4031e8839b05968f28d730e668aea46c2a1ace0c406484140c32745d4b19e695f5c483ff37f7185d87e8f2c93720b82d891521430e2883333e8ca970ea7549f955c3d7e5016439c8233264003179ad2645099cd99b68ea392a1c12ca2fc214b4567f6fb55ee03069926cba45e759f242e32d415cdf8a5901c307c76b6716e8ba012027fc3812b369d3f1bcaa8d8fc5a1342200f5e002e8871d39982749d80eaf1a8616efbfac1c595df280bc8a71648cc50726986c49446c312fc766206157495c1bc3b52ee12a66eba74725ab95f3e67016329dc2856eb7f35e2cffb527bf3cc71bb7e7c5854f3c4eed21ac2a4164db620d52793e287399ec32a5eaea189d28860f1a0807547d31f404dc8184dda158ad253b2639524451c238eed04248e39b295dec99defa05d1ce9c70ff6986c71e1d2c48d64ada52010a9a65e87a1d46f6193bbe29d68e08910c6ce43abf0258cd0b1c7fa4efca67151a9f909b194b3fa385274eb38ef6ec3a02f2485f29f26e0aea018634b18b2bcc50b3cd0140cb1cdf6ea35d61c25f22486cbf3e7a9aa143fff42284129b8879b55e9ce6fc76e75095d0fbae1322915e1f9c2a155e8c236e98260039ad9050e4edab93d6aa7b178ecf93973cdb24139eda3b0bdcab610b22bbdc0dbac83c00cece7998705b363285ed0c777f6195038e08f6e5e68735673ba1bd22ac49986141797a06fb6fb31cd368eb6894344eb1598f53e29367bc5a54f4871c6e79cb0e0b3efa03b96d3d61baac50e2c5eb81569934593a900799109dc3cc17b2c9901c58554979a03e56316cb0e6cf7d8ab46a13580f3e7c2b71396785911e1bd5233b311c6039a7a9516a2a6098ba6639a260b9ffce60e028ddb56325082ee2526805ba51524e2219bd0625e545e66a4fc2ab2f650719802d8f4b691ebe14bd883c7ec7985e6dd272496befb14dc99930348dbca6233f8c162fd6bbcfb321442803eebd72b6718869904afc6ff1c281263345d88292223acaf04fe198f1255a8f925b7860b5d174a4772d6eaffabeea461f0340b3a4350df302f1dbea4f106b42db46d82f5e1f5332e5750407ef8c8b7ce123666eafec42ddcfa7f6f1842fedcf595663bb5f9d1043b8ab751eba15a9fd3f3b4620a7a2972aa4ffd0cd1914b108c87c4891fc18080b23592e445a1bbe0cc1b1b8f85f973f38fce61d3ba52c6665f8aa742b44d3e21356f7a9c3723c19a71a09afdfa4ae0797ac5bf6f76d1958e7a012c1d121ed19d72fdd3da8263f9614a79fde120c4a3ac31a755c23a71d106bc5eb7e441d7561568107887ae3ee1db63cf00bfaf9c75505710985fb4a14696505b628ddc740a27418b80f2ce9637f7503e481bdc6f180e2947dc69a99091eddfec47df525f061882402565132e85335b1b74d84e57f3f0447d4fa39f522c27651f8b4fbfcfc702011c492b2c1b1d5201565160ad6120676032ad499d900000000000000000000000000000000000000000000000000000000000000000cfa7e688c3f79376d908cd65470d721fe5bd2ae8d71b37b02830120c1caeb0a23609a01008833599877cf91918498eaf0d237168f0b2d49f52e9542db7a1d960000000000000000000000000000000000000000000000000000000000000000092709e884b460b6031adaa75b0d1c4f46abcb44fb8e7e8d13618b0bc34afd5c0429d1a3d4be80e22201934314d41d66bf53ef2fdcc1481beaf7fbb357a7d05e2f0a9da24625b4a9a2709e8aea12184f515736bc5631d47b2768e8f2141c86300000000000000000000000000000000000000000000000000000000000000000163953fcf07e5dd3fe5ba183a4afe1842148ac1c5f5630ff4cd46e18b57a3eae0d8841019fb6edb34e1391fc0729b7b02f03d8a6e5c0b2c3cec905873a283050000000000000000000000000000000000000000000000000000000000000000004bfd3a21e4d63852e701b60d66d1865a56607d8ecb0d237ce291b89e7d951640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000226cbb5cd960bb988d166f678471852389a8f999a38dd3a852351c0eede230030dbe3c6aedc949a50f1075bc13f2338803bfb3f1bbc11f740ee439d1c75f42360afb079ad53faeadcd9e75fe2746be86b05619bdbd513a1e07b3e1812321d2920afb079ad53faeadcd9e75fe2746be86b05619bdbd513a1e07b3e1812321d29202b0f895f554613f293f67de3ce679a5c0dcd75015399d566b34ea594ea060c70084c7db908b1efd65be82e10aa354a1b2bb91f7e969a99d878220eb534a5c272c5eb37f7d81b5853421970c2796229c8d7f7d24a16286775ef41b8fedf2a7672d2bebb8ee2622bae944cfe670fe14f4098629ef254e14bd14c651c4f13d6a780ba56035e9ac5b6ca23673376514eb71d9f47f32f2c3b1d62dbecb90aeca6d5010d2f101ec6192c412bbc48059322227a61b0e59ab8bbbae0684fa2bbbae9ef0084316958e79b90ff19901ef97c4acc4dcc6710e8e86957c06ce4d74da715fc403d6384a4e08fba56c5719fde5a204a33e079d62d6da47b9b82228afedbee2421425b9bbc29144b66faa0562de585d1e2c97940eadd2aa20ba07d1340260ac971b66d35dea2a07ce5624e3bb49b177ba973c30f950353565505b9e6eaaf743450f434eefb7cb071f1d99fd46162f8e8e335d8a8a0cace2b0c16711728d43bb010caf01b6df5f0ce9737df26009fa62aaa5ea5c3372948b3caad71998ba4500d70f39c69ae1052687500ce52787304e61fa9b1eb9934adb71391be86cbf6dd32d03f522269debb5742107dbeab5fa5641f9003dc8690b72c80b9353834993a80f0e4bbab134de41beae10cfb61062dc280b881295481c5d3a843e5a110ede30882ec1ed12be82e5a021d7b37fa19a2c9f7e8189efc10f8ba8e74a53224339eed226882297f36a2aa3739376bfe31a2ccb91066aabcddb793d050253e83b38f11816becb938727f7b95bd1f0c630969d018e75ecaf4e217f61fa569435dce3e412248c0abc3449fead3fd53f936d973fc5941dedef21be456579d3be66a6360be82a1318a1ed989b5424bf072f75eddeae1f1b15968fcd687828a0fe77b94266ed091e6d648b776946c1dc59e75123a223d033d077776bd8a81c2a1ac88e613e29126811112e0064238b31ea4c304ab41477107ca776be6810c382f90744ef44b820992fcf999f46e1d48431932cab2c0eafed0852b986ad58225276a42203105f01508beae5d27c99500a125fe425d86bfb3faf9c79d4d9171a2b91f42d44576102e77e4ec34b8a18adea387dde0e963d6318542daf6ae4faa1127a3d738741aa1713ef83fc929a36bed9d9cb53e177201f75f8c887fb151a59cf1e02765bad68167c16391900e13b28a51ea2e94337bb63e07c324c733f807580048834d8f3c918a63905ed73cfd0fc486d52951c5f61b741b6d1c2fcc9e4d5206046ea63446b022751ec329c3f82b3a043116cd9f78511d7e32114b83c726e524dd6b2efc02a256ab245cdfbedc807cf1e4e19c026756bf1bec8bb791a8aa460af34bb7443d107668964d036f3d122795488c98f9a64ab6c3b0b811494e9297129a2ebf8b71c', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.7341907024383545 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [41.296875]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where/where+mean/data.json b/examples/where/where+mean/data.json new file mode 100644 index 0000000..46ca655 --- /dev/null +++ b/examples/where/where+mean/data.json @@ -0,0 +1,8 @@ +{ + "col_name": [ + 46.2, 40.4, 44.8, 48.1, 51.2, 91.9, 38.2, 36.3, 22.2, 11.5, 17.9, 20.2, + 99.9, 75.2, 29.8, 19.4, 46.1, 94.8, 6.6, 94.5, 99.7, 1.6, 4.0, 86.7, 28.7, + 63.0, 66.7, 2.5, 41.4, 35.6, 45.0, 13.7, 9.6, 16.6, 9.8, 20.3, 25.9, 71.9, + 27.5, 30.9, 62.9, 18.6, 45.7, 2.4, 91.4, 16.2, 61.5, 41.4, 77.1, 53.2 + ] +} diff --git a/examples/where/where+mean/where+mean.ipynb b/examples/where/where+mean/where+mean.ipynb new file mode 100644 index 0000000..20aa7a1 --- /dev/null +++ b/examples/where/where+mean/where+mean.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [3]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x > 20.0)\n", + " filtered_x = s.where(filter, x)\n", + " return s.mean(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns,sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 3, param_scale: 3, scale_input_multiplier: 10) ------------->\n", + "\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.016670227 | -0.033340454 | 0 | -0.033340454 | 0.016670227 | 0.033340454 | 0.033340454 | 0 | 0.00055579294 | -0.00030676697 | 0.00030676697 |\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [3]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":10,\"lookup_range\":[-294,1278],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":3936,\"total_assignments\":911,\"total_const_size\":205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[3936,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709715528777}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 0.5483167171478271 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 54.375\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['11e5950d0c875140b38d8b4bc0997697b7b183cfdbc19e767d87caf0020da12a', '0100000000000000000000000000000000000000000000000000000000000000', 'b301000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2376a6c2ed0c2cf1a8660e22a9d8d5529054156c529a1739e4ccc598dc30dc5a1ad43912d8bcaaa1e093c9fb2963a7b0f2548e43c70435807ce93386c5eb1b8e28d831f7650e5fa128897eaf3c582314f6f6e9fefae283c4db76c472dff3c1252c124e56c41f07a5983d5fc41bb392715fd9f61e1e800fbbb97b5a826900718b1e2139cbccc462efd1d976a108f58d0189c6799ec7880ae4d89bcf3a416969f008af0dc41ac1214b464c05dfb73d19619475d271757930497ff1233856269fe92c3ee4eb18c6f6090eb90256b999afc3165942f257348162ae180623334e99ee13cd3ff6e43f07334f3b7c0489ce0256ae0e9fccc95ff478aeab91bb0a5203d428818854afa822477d781d9c417e50eb69fb2945ad6d85c16991ace18cb597bf113ab20e43b930bd1bbf69d60f0c4bf8efbe2a6b07fe7212ba18c2379f2095ab2de292eaa9a0954a5b1f127c44fa19ecd4e4a9f62d6df5be3f889ae6b74959591a0fd7fe722ad667d896b1dbee459818e0043d70938919e4efe778158bb3125930116c03421ec5ed56865615b0464794fd65d6eac0376d6eb6c9091717a83f8a0bba912a73842160d0e22b58ea1eb3bb4292df65ca21fa0d377e95d5d27a9570281b6991d36dad3b25dff9670398286f416b736318760b1c666bd350a1d2e43816f938b9fa741ba8c626f46ce552b3d9f4eca49d0e7073621398d517a68f678b16da21e9c9a9db2bd26d5654305e735b8d08ae34b9e9a12a751428d20477debb0d5844f4dca31691e8997c040078382e12294b6ba9b29390446dd66fb116f5a62ffccc53fa9fd2c7247747ab71c41bd86ea3ef6ef4c4f508fad2492072218abc0094deb9c4608e0aab4f8e5e574ea8eb88a03de47793a2a52f783c35ac626df42306c7aca2bd1a661bfa3004a23ab4e7e9b066895e9c548276a13cbbfcfe9f5f2a0966ee03b650b8c89b27e03cfd035dd822b56956978d21246ea3bc7ec31c332a1e2ff00600ed31f3ca7558a8195e146d043a24a3325a5a930846105f0bcd541a56077545588a25dd4fcc38ae3f52838a47da45c9ea1b0e39d81992d3cb8eab19a881e883670f678ce3f2b7adc0c71cb56003e3cce90e402ae3a27f052bebae2f26cb832dc92503bdc5261c31f2433b85433bf853919476304f9b1a0d4a39ba0a48ff1a65668f3dcbcae33d3efe8b861436ba43f29dc9739aa38bf8b6a0826c20e07a3678a4a6580a31cc98c320ce1d479ab5e1cc8560c4c22f61c94eb1aa4c2c2f2e61b8b7ed3cda87cd78e9183274ceb634015ac322172e52736088945a7914ef7f2f5ddf2e828201c45904498e894e20d7f0cf0103637014261774229d56051c87e0cb577f01a6f131f37def94ffcd26c7308046be35cc043d8315016a3b1d9d7aabe3089e49bc6dc04892de77e02a636ab77396695b79e0b8df707121210a4c539384c69558e0396d659ed20689cb99431aa3a90a3a8c16db1610ec6a5e0944237a8f18180f9231d6c974a659fd5622a8e6e59a4f6ca8e73a3c7de083d82aa2afc28f7f9f465ffe649a367a2789c3dd129fbed3df9df2161e43571cbc131010383ccc90fecb5f27e92a2fdc6092a45f0f8c09ee2123f6df3268afc597fe0a5fb51ef93dbd7703ff3774e99c4617c78bf8e1fc207b33be9eb6ee5c51d610087c2ad3dd9d91c70248bc4a30fa63eb00abb2182ef4e67157169ce0855a36f12b154ddfb52c09520a2bdc19aab747bd313ba328a44e8e58cc90f2cc918085341c07cf6facaa3bacc8ea957fb9665df8a4598262b46488f776fc42659c7bc16802746474dd55f242e990ad104aabdc243b83fa6a5c7a3fdce00c77fa1eefde0d2fa4d7ecb08f47bdbb1711c02732c426c17c68a8417d40410125009be803d68d03f8477860e2be8e8bdad190b1708a77121c5b919d7c3337e8f81fc458ae786b04c95f56500e371bdf0900cc2f473cece81c4315fb2e59e8d7f9365183f5d56223d8fff59c939226c59e919f0872dbb1ab9da5fcfe00a13cb5edf30753d1c1d028249652797e72c890dbbc93de8fff42cbc20268ccdd0772f4b06fd6dbea35d11a6fde1621671125698d614875d19aa7fa70936a6895659215ceb87fa91235292ee75fcea5a789f0cd50c2f6585f7936b9b22a7f161c235d0799003d35f811ae262493e6bded3fd5a5b5082f3707713fe3d8efec9737ef92aa0816cddd219927123d8d645bc9e563f77751e5f720ce8ee6b8f941dd81b75c4457a9ee3b0f90d327623b89090a9951cf7872e69049aa9eb755ae81ce933bdbb96a63df1676380b02ae8312ee30a2bbe6eab20f594367dc8d6bcbcd2e3b7377eaa554a92d6586cd06640e1187e1595e7aaccc0031047388c97782c525aa7e47220a35738f283d560a8ccab9d3b9acf821351c738645636d8c080979a0736e4eed67dcdcf614ba22216165c31de5075be18e112cf8e51f0f92ccbd7dda69856eea34fb4ec470aaa52a71e6837254e809024deda8f35d2c2d7f49723f2e88e2fed0e87621e01e167a2a8f9946df27dfccecc964be8c94856e4752cf9b99c5167c05432ef5e116c2ab0344d573f5b2cb03d2903e0ad3349ddb6fd2fb9434b3667ffd22421ce44ba7790039492188a0e65e64d1c867d2fe7a8e0d284b6c3f9c6cb7aafb4e9f17e557c50c8492f2975c17d06329f8e4730b2ce6657abc439ee6de11eb1740516487fab3244bbb37adc864be04031d1683cbb732b9a19f0889b05800ffd7f9cbba0efd4d258c23c622ac30b50b5f5cc4a4ca210b7e1d0933ae17de62093909bd17d013910a7b196f427bb1dd6657035fde91ff637bf6edcbd9114f9903bcb25fd1a9690f21be48d7a590bee34d8a1f38f64da35ef56d9bc2ec42d53ba60a8c24a528fb0112302b3652aa302f954ce9f9b3467c624e29006caa912a72cb630927db275613078e819fd5e639002667f7057a4ebf34db615e001f86dc300010da17f5bb8b7d1f1eec4ac1015a08822f5ef9a7c4528512cc19012bae7d48c81af79a16e37fbe28ae0f22f228e3926c5a913a6425032868eb4cc68065cb6922c73ebf4a5a26160dafd0b30cd105404166e87eb3f281146681e96dc66d472f931dec25a31fbb662515e97417b58f4a3891364243945488f65766961e1ed08cbf9cbefc6afbc000000000000000000000000000000000000000000000000000000000000000000008c4ed9e2d4fbe8db1bc8c38ea6e34cfa94c2a278f43bb4ea04d356318452fd33063063054d533fc0503c618f87181f2148f4c146ecfc3aba3774e2f386c19d500000000000000000000000000000000000000000000000000000000000000002015f14e9b6ec69f8f4c1074cd3d8b87b440efc9812688c183ffa4cf618212f609df06aad47a1788e0eeda55e96697b7c97a9e3de644d791fc90349d7fa683b01c8a4120737e9eb42d98d2158a6f4698b95a9e2a49f1fd1327fc2357135d1ea0000000000000000000000000000000000000000000000000000000000000000021a75d00879e52e371f26c6fb9ab18389848cfb4f94d95c3697db04900f46c8c1137ae2c64ef0a5211bc4cdb539b908e0b159d29a332cd5a44865e1abe64cc4f00000000000000000000000000000000000000000000000000000000000000002b2421a8f8172aa5975caa5ede3ab3676ddf1bd2c17f76c8159d5af93780966a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d2c575eada1422711e9ad188ba1cf89933fd0fbeb083b61eb0be67940039b10e551e705ec7c97426fbb555eab0fb50715bc7ddf72a3a8cffcfa70ef45f490f183ced764450c13d6e0d08c857d0165c25ebb35b25b5700a3f42c71f0a27fe7c183ced764450c13d6e0d08c857d0165c25ebb35b25b5700a3f42c71f0a27fe7c2cd4d95f59fbebfcc7a2bbc7e983823c49335cadd1724708acb68ea79953a05b271163976799fd427cb0509d17935eeeb93b60b1215f243739caf4bb4c3e42a12a53fa897446589275f72a315feb046f0d0585be25a2da9f54d4548045f44f00177d8620fbcd03be6a4a767f38b0244cc91713ce85bb97033399466041c9e6722f174baed205195088499cab1cb0f3c37c3aff24d8b56ea8019b6fc94a4d4c480abaea96e1422b19d7067d5876bbb4e24768519411edf2368e2944aa02cf02732e29e76d5e68a179329ea1026ed11110726ef243c7a5356a3d8148ee20c55d980994c31c47808808d625e7b5aa724f8ccdf79965eb62dcaeed3ab5bcf09da1ee1f9e2dbc1a61db18a5049c33029129eb59d156e8b1032bb967dcc41c150515aa0e80005c66eba37626d884cbe5e166f558b82fcc2e721fb171f0d4f509a455742602360ad218a4ad271743ee611d5093c8c79d71c6c4eb41cecec48c3f347f2d1830cd5260e6f396de067539b71f4dfe5fb852cf78802df02bd69ee40bfa3b5b2c9f41f9ad8b6aa53930cce1fa81d3dc7a931f8dec52141cd8a3b5df0010a45c12ebabbe9cb44ac2c4ec3470360b114c85cc123cef6686182194d029930fc563007a5a6e274b937674043f7f989969459101bfb5dc828a05ba317f3e0cf0d66415bc78830c26efb4aca469ed9cda285ae24581d982e6083aa6a7014dc64f4b0610337ef0da5f467df4e4c6134bf2ddf51dcfdbc80198e5e9f64f10c1b76bae8e0a41619955a5108f3c3865f48e68d4a2766641ecbe4f12e1eef7f2f3db1550da133e50cab898b37e95d92c8fa6d2f556ed9ed297ff179c0ed35e2fde989f632312db5cdb8aed65e0339234f6736bbe371e9dee3f5fde90205fafcf13877728ee0c58486a58b99634125636c6f8b5e8a809d3de737b0238a12e6e0cc25f27492c2c0da11b40998c1d17d2aa27e3cf87004a6b16b3aed9b4f6ee989cadc08d020327b0add0ff50fd57f3db1e6ae00c8ee48ca4784045308f1cdc8537e1f1fa2fa7240d79aca2a12fd833be66a2107eddf01111df2f91700288398c6254ca9ba49b03303cf2e4427f7f58e15b5976adfab462d4d3be8fe3cd3ef511397253b35b0b2aa11279bb7da5d574fffde0f7459f25a261473363626fdb9c4fbfad7c0225df198a890a8a725385a3a0f350b453dc1c148d8ee5a9d16d6006de3cc1f4d1835b022455567f916226c40a7c5d4a5e91be0b5a8ecd5cd93aacee90cb87011b606d22e29962c6e8f268506499d7a01634ce1666592668cd1be76a2691985afff65b01b276ae15863df33264e215aa56056a5ee556c573b0506f3c646d3e596af061225734408fcd858ad95dd6af73edb351d2a649e77988bcee4c914eb8f629b31b', 'transcript_type': 'EVM'}\n", + "Time gen prf: 0.5321259498596191 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [54.375]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+median/data.json b/examples/where/where+median/data.json similarity index 100% rename from examples/where+median/data.json rename to examples/where/where+median/data.json diff --git a/examples/where/where+median/where+median.ipynb b/examples/where/where+median/where+median.ipynb new file mode 100644 index 0000000..b086f1a --- /dev/null +++ b/examples/where/where+median/where+median.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [2]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x < 50)\n", + " filtered_x = s.where(filter, x)\n", + " return s.median(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 2, param_scale: 2, scale_input_multiplier: 10) ------------->\n", + "\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [2]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-304,280],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5393,\"total_const_size\":1202,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709690386793}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.621981143951416 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 40.0\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['3e89c37e1116fe2ce68ab4e73ee44968d88afeb2eedb85f2d87c4d984264b311', '0100000000000000000000000000000000000000000000000000000000000000', 'a000000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x26e7e8be09c0f57035eac9e47b888c2f5dfd89611d86aa26d256ca3abde9d7721e7755c1b3c2cc287eae24e1bf8c3196f2e5ce4cb4417cd72fe5d2350c2fa80827b4aa02a35868f28b36aedfd3f7a0b7da33bc5cdd2344a7eb954e442699bab12015c6825408ef0e078ab05917433d3ab1248a6abc4b8b9cb071e6c90be76508150f50530685e761d90204579d9663d8fb398037155eec7be4da2f7fb2652a5a105d5f32b172a54e8440fa6a2da2b0a00f9286e5de59910e9a29740040820588185aa0784557a2663a0c2f6820942713e8bb650983058b9aa9dab9deb607a62b082912b958545e0ad1f31167a230c2ed15a37aaa7f32b201fa2916bcc0a743411363b3847772c9e4490d1f5430eea93e529ac12ea087d65878954ad021685e7c21ed15dc9b2bda2ab3ec73761acb04056eaec21a640726081e4b121fe63c31cd1066344389ada8e95cb62c729b6817c204d9f5e24ac45ee673d7119aba0ef11724dd4c3d7b8591bdc9c4b15a03b644ef943269a88cd31dc42c87bce71c5c521808b86869e3b535efdb47e67f90d665db9decd99d06c60f853edc39ca7f7dfec40524c6a4adc5e540896b235d1aff100409f730a60bf6671c26e99b2a1b671a3a29d93c7eab5efe2d385b0cd7d6182946034a9aa22b65bef2ea9a231dc0ba15991ecb9415b47da9ac8cba0db69b21b1b220f0467500163d062996a2e38d8a91961a312bb1fd92963585a88beb7b4ae35f29130b54bddfac38cc03e73836a15cbd211848b0987a2e518f2c12ad205bac5b224b9e65be0b5b93247bd8ed72874ac32e7091c08e8840a5e3d3c193d4133f6b48f1ac596f580333d35692485c82e9111c57f8bf46413e204fcde93089a6ff97375047d672f529895d6a38b0c43a39e62e2102f13b468069c11674047caf75b89538a4a71a2d0c2513a49e0bfaab854e178d6bc10987baeb03ed5227b6e0cf788732ae352be2fabd9bec17171b449cb209f6f45632b49230112db56af8614d0b8390fd7bc0369a0d79e099bf43fd983816e457438647ffd3f041aefb791b93a37d63f2cb6cb20d13f2f14ac264f567e709de7144c0cc056f043bb3fe2bdae177072429f560403136f977ea5ca3d14252110760bf1a4a70c4721e9fb2ca2ce321fb2e887a153a24a8d08ec3aaf016b96f041a43bb3077433351fb49d8d8910a3bc85822ce5173d3fb17aad5c62ca61b3b157eac767151db7d6109f97cd005b794e759ffd8892961febcb23430652dbcbc0a3013f4789b83b041161068004059bd49518d4ed9fd560ae5edd1762f7d472e28dd54f1ec06388dcdb7ad29e788833ff39a37f38db52ac020f095266d12c9671d357a01a7660cb712e0feeffe21eb2879aa0e980f9f0a5a27dbbee25631db7e2d7c52cc556aa6435039c9dca6af8208b124e214309d3b0cb7516689a3aeff830c7e53cbaade92bd59d65391e14436f14c7360dfabc47625c236baa9ddf5b93911295a0b74b1f73fd8c73b499901057f47a2260449480f441915a497adfcf80703424659b567964eb2c8210503a29cc0ad5a877fd732ab3c550221a67c907936098515ef4f928daea3bec25eaf87d697f55a9385f3e7d3df97564d2feaffb69f29f5b738cf6efed57323a8a24b6dd2269dc23e5742317776742a66b349c5977910cfbc66789ebde262ab0aaf5d9d3bb603873675d9c8d687376e43d6f767b0cf14d152b4bbb67c9a386089dd3d8ac700119d93dc4135398298e626e7622e3b77270fd56f194f6061c12106dada4a769b5153e8b33d45bfc814ef78d0c13d3157034727714fee2c1d4fcd2ac107eeacdd4a21763f00bf8d9e7a0fa3c8e02f9b9f2bfeb6d854e161940f4fd2712ea1877100bdc9600d1e32d7cff221e1b60bca482dfdd56d5c8d4d16dfbab268eca90ab83b81dfb42eae798f5cf5b982fd01a9f92ed66eb127c1c1cefd469c20db361a3d1e40c6be920d6ef7ed9355d99051d7b62ee31761f198a7bf6f1f46faf48c2cc6c9483246807d1d224dad0b1a9bd59c6f1375485e7f6c0ac0fdaec5d4d8d2560fe3545be97afdf75c9c64e50b7109eb670582d87eca93f75d35fcd7da366a9197d084d4c9566b968263f792d797917cbb13e5b28bd9de0cdedfcf4aa8e00defc150a93f1801823c71f28dab2a4705d56c2adf7456847a11da57aebab56e44b8697cd37009f65749f3d444758e93d741eb2a209a7fa6ed65e0377237d1f5a5d967145f17f871d6110fd5ce6f053e958d760348c0c7a27255e0c28a0c1d523827b04c5bbb50cd1a45fff677ce6277814bbb0a537735165e15a0f63f6712723eb4d465288dc985fdb4ae78a28454b25e7554021dd033f3ebe19d1d2c64d8b42472df4d61633dd90ec66eb3e7d47aeee6fcd820fa4459967cc2b55250c8d365f861ec10a3d0fc4876df1e2ba651e699fe239d161ff37debabc8fedd9a337271dea2b2c04db8271dde36f408a8dfbdff83ab5226d3af6cb11c88a1b6e0e051a845e37ffb5f2717dea7b05bbe39779cce5b5c910d9caa65ecc58c9ff03597c7f17c07adb350f2ca7e89b31f9d90066628276cac28fda830e7d197b191f3dae889fac0c5f23a33ab80fa30088c905b1100c11f492a533913af1ad3afd8b4ded87e2c3346c5642635962fcf5332b1bc2c4f7d1c2c2bc9f26a834f14b3b0e4d19981e7826ef0bc650b48794541b888fd209b77b3503027a1450087ca16311315d14dc853a3da642a743d05152087d4a185afa0251b1f7d6a15ea8e0955e1363c0af0e36dd1e2ecf3c4e2241da04f8cad36f0440922091ca5c1543af263b600f58950f89809c38f03e3bc11e682e5fba6e420d0ea2513c30e62b59d0abeb2d4c6f38425b72477a40bc2645650b1d490a36c7ab2522d2307b847611b99f1c8a50544bf97f0cd2ff0708441b9824a01d6fe843827a7d726a2af41a78f4c5dc188b901e5478de2003a89aa8fbc8cb70d7fdd2bab94a3752a6f32d2bdeaa77335155ff2bfa134fbff03a66b9b9f1196baa0c0fbf1b31d4228929e9a7a0eba1aef8461e2249263c7cca77bcd561c856074fed4b43ba830952f5fdca8bfa0f428ed7b92bf2440b146ef38f8b63297bbf82c479a325febf3cf0e5cc99636e280a15304156e3a64b5208584e5fb71ab102677887e56f4eafde700000000000000000000000000000000000000000000000000000000000000000a91979542f83ba53c95a3c1983c14255ae22f1224223835370a01b4fa9dad5f19752e071bbbbd16a0c8d8cf98b43e96c24b493147460104fde7931268460908000000000000000000000000000000000000000000000000000000000000000007721a99affe59187ec8ecbe3a6147c0440d22fcb78da9875505c7d46a73b70f2ccb8ad606ae53a107bc808f5561bcd0d0bd74a50507f1eb611a22689ad312472bf9129c0cd0b6073370749dfa34f3a6454ecf6adf5c719b1158af4922cc29f100000000000000000000000000000000000000000000000000000000000000000c97df047b5075359e3a5d9a2ebfc58780b554f7b8e84c0a7a57975419d50b89176b0511ae67e677143ecc9185210b767bf784ddf8a25b871dfcb944d8310b80000000000000000000000000000000000000000000000000000000000000000003bc74940bda215f62f8f116f5c93df1a41a0a614911c8557f54fa9df761d83400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f69a9310e6ccdb8e64dbe614bb6c9a37f2daec82f67cfe28a6b8c6c870d45fc29e37a4068b5fe04518cf918f63b5fc11171677215c5e38fd8d7a6cca91916db2a04a66e2780cceafb5c5d79f85641af3e031b464288dc90ed0a37b52ed2af4b2093353d4747d75b07f3865f8c6c22a054318307ec2e5fdff133ff47f44245210c945f8a1224d213d80faa2d5ea4fc564c43fedea87dee2b59bc110b42d11bcd0d03f16c49116c1b78d22fd992985259c4d446a7cbb95ce976f9a3ef6fd6665128022f120db438c208fb77ab8f0f8f4b7f7e2766e7320442428bd43b7cd32445241934240722a4498471a3f538a8f6859879e0657aca32f844f8e9a61ba73a2515b53f6e50f2e1ef5dbe02ce89b3a2e32cfef88e7e51c39d221e0f9dd90645601ff23eddb2c42d881cc17f67678ae378aa3d066c83a482fd5366fa8850e2729c01ee36b5822935811d44bea12c593e2f72a45f2636546b64fcb47869eac01b571427f91a337cdc90c57fb82bedf3ca5c164b3286b5aa01e08382bebd3c71a4ec183cf873624c7206e9c34b328099326f1905b8eef822d8fca0e847d690e73d252ff0b7eaaa62252011a766a0c3532fefb5b100d102bad71c0f0a7d78377d61350acadeab26e6a0d5e74217db3485b3955d52633d264fab4f6df0fe489f287d7514fabd10809cd92c1642dd17dd5a106f10c16375b7e281e75e4fefe2614ed250176fbea671be74e4f141ae4cf5be291d16157097ed4c22e228392380d8bd23312195b87e4636f531f4d3c63827947975fba53a51fcc6a52e99697ab38c37178b1e5a5f04f6b398c6034aa6dd2421b658e090e3ad5f55ae4be5b99bdb2abe41f001e456b4a43df0a0b7a53ebdbb98db80e8c4f909b160564c78b7c0717a033f3517ee3eee6a6f2e9638e69cf6f9f6abbbeed0ec205fc7345fc2a78ed4e5695f632425c5d25b4ae60d9e4b1ae3023e230f5e98687c9569f915e873c6bfba3e12630d7c6bf663126bc70d5a296d85c5ed9ed93ff05c58e10b78d01d9206c4d03b7903d82f3b30038da995f09295a4563c653838a10a483d5811da5f0b2721cbdedc18fad8f8b1df1ee9d30224743d01e67664c2f1f6bc2c628ffcba829a58365a8705d157f534dc112e0838868764ee5a11ef42aad6107f2f68a9ad14a0e26b7111182e28586caa5cd1669b269108007f10ea536f9de3e4677bedbc2fa389eebe4d261ef69ab70532242debe6c67ef1bed485339a071a5ab0aed17ae7b097aed31a03497eaa2955214778e5402e173f0fd0b9e9c2a44a68f68699dc73ecdd3a2efa0556f43411de569072186683672054415ee5e9b54b588ba12b2213dcfd4250de2b373a46c21511a861595d31bd02bcaa85ce699bc30e166b2b01116b22b59c9e0b4dea0240b9730fa5a4c437b1d565af79bb339075b33c177702a2c0484cbdfe1133cd7208f173092d12f8fca53e211c9d20984eaae054b05a9d66782cdad150210a7109643f1fc983016020f52316896107e4076304a4ae4eb1d105b0cc12c70f2392044d95c123585b7d0654e4ac428f4dc84f8c5f1ceda702bd6f4f6ce853', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.78914213180542 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [40.0]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+mode/data.json b/examples/where/where+mode/data.json similarity index 100% rename from examples/where+mode/data.json rename to examples/where/where+mode/data.json diff --git a/examples/where/where+mode/where+mode.ipynb b/examples/where/where+mode/where+mode.ipynb new file mode 100644 index 0000000..106f18f --- /dev/null +++ b/examples/where/where+mode/where+mode.ipynb @@ -0,0 +1,276 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def mode_within(data_array, percent):\n", + " max_sum_freq = 0\n", + " mode = data_array[0]\n", + "\n", + " for check_val in set(data_array):\n", + " sum_freq = sum(1 for ele in data_array if abs(ele - check_val) <= abs(percent * check_val / 100))\n", + "\n", + " if sum_freq > max_sum_freq:\n", + " mode = check_val\n", + " max_sum_freq = sum_freq\n", + "\n", + " return mode" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "data = np.array(json.loads(open(data_path, \"r\").read())['col_name'])\n", + "\n", + "create_dummy(data_path, dummy_data_path)\n", + "dummy_data = np.array(json.loads(open(dummy_data_path, \"r\").read())['col_name'])\n", + "\n", + "dummy_theory_output = torch.tensor(mode_within(dummy_data[dummy_data>20],1))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [2]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:191: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " result = torch.tensor(mode_within(x_1d, 0))\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:201: TracerWarning: Iterating over a tensor might cause the trace to be incorrect. Passing a tensor of different shape won't change the number of iterations executed (and might lead to errors or silently give incorrect results).\n", + " result = torch.tensor([torch.logical_or(torch.sum((x==ele[0]).float())<=count_equal, min_x-1 ==ele[0]) for ele in x[0]])\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:201: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " result = torch.tensor([torch.logical_or(torch.sum((x==ele[0]).float())<=count_equal, min_x-1 ==ele[0]) for ele in x[0]])\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x > 20)\n", + " filtered_x = s.where(filter, x)\n", + " return s.mode(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 2, param_scale: 2, scale_input_multiplier: 10) ------------->\n", + "\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "+------------+--------------+-----------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [2]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-40,544],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5393,\"total_const_size\":1202,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709690439095}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.494189977645874 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 40.0\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['3e89c37e1116fe2ce68ab4e73ee44968d88afeb2eedb85f2d87c4d984264b311', '0100000000000000000000000000000000000000000000000000000000000000', 'a000000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2dcc2b832491afa61773cde5eed18b5057031e7e951f3f2a78ef8d12af522a642f6a3f19e7ae2c68a96c51b38b17ab02cfa71fa5d258eb1b21545a6b26be76dc22d2cb7b611f9555845bba387f1512077e9dd9e7e19d1bc8790702f3ee2352ac230749519bd707869f8b6bd325a677dac6640f6e1ddb38a613a5799bc38429e9034896fe31607e99d6a9c16f073e4d47144228fea2126fc6872d93ca05511d1a213e637c3f11f811b27ff9c2757933c10196dacc0214be9041a8e239d8cbac20018185a90895f493920d9332e11eb43a4b119cdced9eefc493f651df47e348810cb30474a9d09a519402bd781b1e6496925ff5b650b73515d22c1836489129e020adecc3b08d7e1c0f40cc6b643c34e0e9d0a40d7286108594dab2bd3fa786982412645ad942953e12d1c758eb2e00a58f374998d4e545c2c82e61657b574064175555019052da7b7522d444481b83a268262e2d4772ee773728b2a36b04e2a923da2cd43b1ac6dbeb656df05191868d504df8a6f9a18fefbc33652bac7ed7121368126de85878fd0cc7e69ffc452dd3ad0ca3db9810a72280feefb6309026741eb60e4cedf36fe587d5cd99cb29165f461041c15c863eb37a5a817ac0a739f123f6e8d36f27ad763b36e78a0b963a81d50c6a4ef70e0e4304fe9c39eb9073cb0b47a308531e0604b0c603f9e999c2bad9b7784b105402d65432307f723026701e4ed06cdc656b13bffd18fda211d03f413bcf1d176791af7272f336bcc528da0689a054693982bd3d2794092a34ce624e46df44aa09657bbd4fc59286dd58942c9195ca4a3ee2d0f5adfe7cbaa3f270a6cd6ba53261ad5609f0a94dc581042f2e07bcd6a98fac950b6aa8d58efbda016b571b851ed8bff72878d119a68901c42c3981670a0cce079f2e87ba8002ea3b07779c068463a70d4f7be4660c6c3e8d00be18b90b81ca7cc46b141de73cca582a067603e3452ab1f8272978b900ff04103fdc38aa6d2a193bbab8643e1bb99786232ffa1d26dacb2624bf17ce6779f32fae57d006b2fbddb6dc6ffbcf2837f3995d0a5612befd543104873662d6e215258362d4770c34201b47b7806db7a1e6adc0daaa353d46ccccad720eac98c8842bf3da6bad879297866d429b3eab3749e1a39f79c1f1e8d16d98d883a4e117992f3632538963d734fdff618686cfcdf1b2a34d6374132b72df91d582de31fa3e0e012008650599b5475c1d5a90d3f1ca47e982816a038130e1a3c90a1a59029913acb7191e9f2c17dd77f43c87f17cdf848e766a2f3bba97ab4b4eb504fc75e602c01aba31997d2191fc35d1a9fa9d08a6d9442ecb61013d6a54fe7ad98b429d2d6fbbeb0af5e758adc0f9c74c181bce3b06a3e65fbebec9f835210434dd1e830452b67fcec85d772b569269ae25998c2e605b3a7796b687010661922b4296550ae61451fa33551931ba27c9ff77bb0d68fe7da7aac407536355a29c221a3d472081edfb520b8e874ef6d621e0546e9c6e1c7cf769d085ba33becbfc623d9e9c0c8be291c500e408a663195f12e435a0a163ebaa42ef4589b29fa7586ef977130f0700550925b8766a99d0ef110dce2ddcd86f1f1b559d4af94331a5b48bf34c1116004f951869091548fb52098f1dc0670aa120a1958bc5c53d1833019dd550199c7962626166f62e7facdf2de6b29a8e49697b39c8becc9dd5ffe1f00c202929aeb20df166199306f4c4c386647e0009c946c3a7e1edc865e98054cd5b78e12c53e9e0841618dc03f4c3ebebe7f305adc861b5cfc3d97553698a61737f232825f49ed82e8ab5e4c07a685cf7f9805a68a18f7c5efbde8bb947b042324f3ccd0450d4a3b98a3a3167b33771db8c09c11aed2992b016ca59c973fb77c2ec3b9b19023c8a21c3158a73ddc838b602be66d43eada2b73f107c672dde31ff25c3d012ce745e08f00baf9b85ac0e42edd7241ca0fdb193ec40a3da0e9ff9fd26709d009933eb51539327491d487404ee43e0125933feceba86a132c27e8f1138150b0aaa29e23a0760fb1e3dfeef1de3b1f4a4dd781a92d580892ea2f3bc74b790d71311c4d6c62563da124ae3a501cd91ef8749eeabd70a17f59a848280f2811b4006db35c7e8858312ae20cd6c50882e62250ced070a28313b89d30c6a3b0bed542e1dfb3e911981410586789c022ad3c0b0a81616379b048ce50592a0d0a2f795081a21b333d0dbcfacb412c48c2709803d599bc6b689b1972fe95c87dfae0ed6226f3eb04398fa768dd50c4f9dd36403a2600fd14bcc7907e923a4f6578b07a82f4b5978e7b081780ef375262b96a7bf0f0bf1f19526c8a619a8dedf425357fe2e2022cfe6d06eff5ee9daa7bdb4a09867fc75ad7efdb9b1fe87154c46915e852a00aa81b8a469b34c4a910a05a56f923089db882b3ac01f935d5b94f5c2a4d8011fd76d6a34e671b189b75655d48fcba520bf972273e5e961bd3c4e9d9e4b6f1e22bf8516c9a6103465fb2c5e283f2b16d01988003df351edff9800a4c6a39806b8111240d3b120740e6e08c6a900afd6588dc8ce4c711ef2166a281294599e01f9aa70921d49124a8cfda3105820b111c430ad75bb4ba80bff8ad439c66d99008737c4b04666da34e257455257f49496c78678a210407b51a12c4080fb5b3a006388f07a782af2bb0f391cb62936c0f62418b14163563bbccd6b85647dd411050104968972327ed4a4a7cfc94fbebc7e1e72e764d6e82a3be9fafd679617330e901a0cd54db952dd0d140d59e88f13f2fb843c8349faf44d237f67d724836b1f982f01f74b50966b8fa11b0a588757c8b6746eaa8d917352dcc66fc401d40d208c7285faa6f7e8ec6e3ca05ef98fbd0e5c620f5fb31b4cf64d76a1ef8c73620cb7b1f376e9f0dfa53584d01292534cc7edc5244f0df707e6b2aaa551dbe5e900db117f4a3dd5e6fa7705931f02b6a45577574775e214ae9e8a8565304df9831c39cd68ab90386530ff96ba20b578814db513165186aec675cd5f7bcbb4c50c0d4cafd5e555f00f013e0c87a87d7cf49a3a9b930649e81c7e5a6572b5ddc1010b32cbaac73ea37e5b2d5a89e99a7fde8e9511b566805c9dfaf0b12a7ab41b1c0ce48566b561a39cbbba9ca8e943ee9e7498f3ff069e4437efc6890eb3ece72700000000000000000000000000000000000000000000000000000000000000000a960b320227b50708d4f8cfe1df4e4a4d3f3e98951799f750cfa034cc76563d2971fa49f88c60a6914f7e703d3c741fa09457808bd6044c4f5006c5f33213a600000000000000000000000000000000000000000000000000000000000000001af296de7998204974b3d3080d32ef441a7100efb208c71e6f0bf550589114142a51d5cac3faa20bf646be587bae7df51d4c15d8842d9558f25f5d66b6ca58d311b88dbab3faf0a900e1baf5c0d79a5b17e4115799e1c3c96309a722d0b0abfb000000000000000000000000000000000000000000000000000000000000000026bfa456b08ab4328ead7a7df5da205291e085b46ef42255f30a0728f1db75601512e632f622acad3735e4eea3dbfb51b100ed09ac1eb5a35fb4cea1ea86934000000000000000000000000000000000000000000000000000000000000000002b6d36c516368f5c9f4ff829b180eb4dc8595a63554671148e373903e82ee31e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001971c3278331fe12cab8f50ec5296828cdfd0d0eea9e6344c8f2cd7f1e575c6b04e6b327b67b79b19934c2ebe2fd1fdc19b802dc8b5405f0d67fe7fa58296acd17104b76bcdbe565af13de6d2ef2218c51682d1fccb2be4baea6ef7dd066aa6425b8564819bb7f80558ab190959619331d5cb8a97a75ea075f078e442e5aec5b01bad628feb6a1d0479d82527d8fb8c20c5735e2ad6a1735e6e95b4dbf979acf02b54762c9b8b400e65f3ae3ccdbd3ea9f7c2212fffe44bcfdc1a1a24ce25b3530156e926c82492b9bb5cf2e9b3b50b110c27b3ee14d9f988594aecb1f779d3510f89f55341a07ea7d87219dfa8b57ab19ebbca8cff3ccc9fd27bd8c3b0c31082cda8e718293aa83fcf4d120570a1b6d88bb6824dc6791d9c32e1fcd7f9afedf1aa0828dba0394a21a025be3d0718a7eeac7b35a4128ff694f6decfb589e96e914ac6948419bf48ca10e15a21ea9092c3e778de6f50d374281338c06b3876915259407770bc6850bfaa9a380b48d6c72968c575a267ea2c81bb32e25df244ea00539a930ab119c166b1dcd2438cf1c072a48175c1756ea783a5d1022e4b110971f32fab05016585d1f24247382ac54d2c051c6b511cd407216f9a4f74a7a83bb172f74e6053a5a40fae07efecdec3f8e140fb98e2beb3289e54ec9fbd76d4a9e10821547b7052ec5ee1259d113642ef8cb81f77cb480ceb2cece020b24bc58a00d016c58f1a0e03c8b55b3f551a88b1f815c27aac6cce02b47e8352d654829a01e9ca72049a9ff31f30db1e44f6fd87f25b1ec4dfbd360a841b43fae41e02b280bd2f24eba673c6a7d0f565d11aaf55f2f5d4ea4f8bafe55ae9d2c30b62449ea087b7aa3ba6d536184f168c454a63e8b745b92ef753c4b950ce4f758d7e2e08226069964e68a60ad44f65ce76a9e7e8138d2d96c099d9075fe7e15ac30aea66b2a7e11d89d2606d26b9bdba6b112abbac883526af82d2b1b70d473ce928110e6213133fb08ab646300c060e94cc8694fc558673e95ed44dd24883310e6fe60ad0951d2102042dc57cc18249c0146a9b98dbf7c1b087e7fa30a20a8fe451abe1826476a395a23d20a88d536b4e582aed61ee3436bcd47a8496cb57c97fdfc550310f66fec1f762f22abd5e0ab9b1ee5446e3273e6e268763ae44eb063c093e50a2869e59b97346a474dc336e157d42b2bda3f5b90e9b2336df29715980917835a2d54029db75731bbad77362f5d23f3ff4bc7d3312abd37474c8ebc507375c780172d83cd06e8672404978719cbdb1fa205f72aa682f0fff7ae2aa0972be6c2d21cd0daa08c7ffe0b0fc67add58634995eeb3279d321e75e174f805eee0cfd73a06332983c35ef9a167d6b5c22ce81baa6fa08ff992d2689c94efbca58ce12f470a36a20a8b1a483c7e89988f7792bf486ce36caea044f0233d12d456481c16ef198d03632416e62e2c8e535acdcf16103086499a9b642776531eb561f96e7fe50622c4c4bb83c5477b1835fbcea4676aa17754d26257adbe71491592e9433dd511b67868603461379e496f20fae3fd8f7b7cd18db67671d01ea96f39aea4d67e', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.85917329788208 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [40.0]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where/where+pstdev/data.json b/examples/where/where+pstdev/data.json new file mode 100644 index 0000000..eccb5ba --- /dev/null +++ b/examples/where/where+pstdev/data.json @@ -0,0 +1,29 @@ +{ + "col_name": [ + 33.0, 75.0, 38.0, 38.0, 70.0, 44.0, 34.0, 67.0, 54.0, 78.0, 80.0, 21.0, + 41.0, 47.0, 57.0, 50.0, 65.0, 43.0, 51.0, 54.0, 62.0, 68.0, 45.0, 39.0, + 51.0, 48.0, 48.0, 42.0, 37.0, 75.0, 40.0, 48.0, 65.0, 26.0, 42.0, 53.0, + 51.0, 56.0, 74.0, 54.0, 55.0, 15.0, 58.0, 46.0, 64.0, 59.0, 39.0, 36.0, + 62.0, 39.0, 72.0, 32.0, 82.0, 76.0, 88.0, 51.0, 44.0, 35.0, 18.0, 53.0, + 52.0, 45.0, 64.0, 31.0, 32.0, 61.0, 66.0, 59.0, 50.0, 69.0, 44.0, 22.0, + 45.0, 45.0, 46.0, 42.0, 83.0, 53.0, 53.0, 69.0, 53.0, 33.0, 48.0, 49.0, + 34.0, 66.0, 29.0, 66.0, 52.0, 45.0, 83.0, 54.0, 53.0, 31.0, 71.0, 60.0, + 30.0, 33.0, 43.0, 26.0, 55.0, 56.0, 56.0, 54.0, 57.0, 68.0, 58.0, 61.0, + 62.0, 38.0, 52.0, 74.0, 76.0, 37.0, 42.0, 54.0, 38.0, 38.0, 30.0, 31.0, + 52.0, 41.0, 69.0, 40.0, 46.0, 69.0, 29.0, 28.0, 66.0, 41.0, 40.0, 36.0, + 52.0, 58.0, 46.0, 42.0, 85.0, 45.0, 70.0, 49.0, 48.0, 34.0, 18.0, 39.0, + 64.0, 46.0, 54.0, 42.0, 45.0, 64.0, 46.0, 68.0, 46.0, 54.0, 47.0, 41.0, + 69.0, 27.0, 61.0, 37.0, 25.0, 66.0, 30.0, 59.0, 67.0, 34.0, 36.0, 40.0, + 55.0, 58.0, 74.0, 55.0, 66.0, 55.0, 72.0, 40.0, 27.0, 38.0, 74.0, 52.0, + 45.0, 40.0, 35.0, 46.0, 64.0, 41.0, 50.0, 45.0, 42.0, 22.0, 25.0, 55.0, + 39.0, 58.0, 56.0, 62.0, 55.0, 65.0, 57.0, 34.0, 44.0, 47.0, 70.0, 60.0, + 34.0, 50.0, 43.0, 60.0, 66.0, 46.0, 58.0, 76.0, 40.0, 49.0, 64.0, 45.0, + 22.0, 50.0, 34.0, 44.0, 76.0, 63.0, 59.0, 36.0, 59.0, 47.0, 70.0, 64.0, + 44.0, 55.0, 50.0, 48.0, 66.0, 40.0, 76.0, 48.0, 75.0, 73.0, 55.0, 41.0, + 43.0, 50.0, 34.0, 57.0, 50.0, 53.0, 28.0, 35.0, 52.0, 52.0, 49.0, 67.0, + 41.0, 41.0, 61.0, 24.0, 43.0, 51.0, 40.0, 52.0, 44.0, 25.0, 81.0, 54.0, + 64.0, 76.0, 37.0, 45.0, 48.0, 46.0, 43.0, 67.0, 28.0, 35.0, 25.0, 71.0, + 50.0, 31.0, 43.0, 54.0, 40.0, 51.0, 40.0, 49.0, 34.0, 26.0, 46.0, 62.0, + 40.0, 25.0, 61.0, 58.0, 56.0, 39.0, 46.0, 53.0, 21.0, 57.0, 42.0, 80.0 + ] +} diff --git a/examples/where/where+pstdev/where+pstdev.ipynb b/examples/where/where+pstdev/where+pstdev.ipynb new file mode 100644 index 0000000..18742e0 --- /dev/null +++ b/examples/where/where+pstdev/where+pstdev.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [3]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = torch.logical_or(x<30, x>50)\n", + " filtered_x = s.where(filter, x)\n", + " return s.pstdev(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path, verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 3, param_scale: 3, scale_input_multiplier: 10) ------------->\n", + "\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.028796673 | 0.057593346 | 0.057593346 | 0 | 0.028796673 | 0.057593346 | 0.057593346 | 0 | 0.0016584967 | 0.0018074065 | 0.0018074065 |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scale: [3]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":10,\"lookup_range\":[-928,608],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":7511,\"total_const_size\":1506,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709725951872}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.506464958190918 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 15.875\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7f00000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x20ac24c395624ba607287699985edebafc3df56ecaa78f1da541426526771e820c6a681bd0010e55e93d3cd97654f72d0da8a97a616dc5c44677740aad589bf400b4b1a7add759ddaa0213d41e0a23d504e64df0402c2281dd026009a7b236ce0ed1b0afe26afa900df2ae3196105662cced4c0e3d9f8cc9e2e3b56451dc3714190f3060aca6c50133b39fe094d2ce075ac3e48f3adeb3ef57ebad5e426626be1500089fe898b36a1989449d4a7989bd01c89ce947a1fbd4a4f563a8de60c8152134214eb826ad6bdcc5ad5e2d6e432fa00fe27079a6dc446e4e8d7b75e17c8e1fa190bb97fd4b5dd8af8b81083c0373b8878f4cfb443486ecdaa4086694258608d4047ca53063f4d976c055443f8398d9cfbd5d0c66e56a9a1c1412d5ba5c830e987fb32f2deb27c3d05331b7a9d3dda9db0b560837c3aeff734b63ec393be02898ac2e336f17f46eb6dfb0b9782b25e343eba79fe70563aed23d8612fcfc1d08f07378b825e79d90f62885a90ff2a575e7df11f023be7ac733e468ed5b3a312afbc811b23f68e0433a94673545ee375cdbab589aef6df188750972170a8dbb17d7ef4e871a9b03590488dc3619a83933013e95ece1f8a40873a9e3d59ff49e264e5f17c214ffff27e11dd5f52e08eae858ad552176724daa32b65db3dd1d0325b488a789041eea38448b3d19357fb9e16b3dcf29248f5afaa1e8fcd8aa909e164cbf14632cba0e96e4b414aeb798b96999fe3faae2c78bd4154310ef4a984307a787945179f6c2c09f546db403874e19f2fb0eba8f82a33fb057a993c8d29402415f8578980e28f041726527afe5e64d2598a2704dc88a52d5c3551b7e793c0337b7c9610995ffea8f68586d6c095c3968c3acfa1dee1d252eb72c800ff64303e1cb812c301d6908d2a0d88eeeb5ae0c109dcbaeff4e7b05854f6d7b2f26a22a39fa0af906d0706042934187fa0ccf927a8f6649629ecf5177979dec1ce20f20582c20ce06beaa748913763ccd90cc2a49e4ef71f2231cc84459ebd357ede12e70a056a684009ddb812d05d314d148054652f91966f21fcdad9a083c60980507adbdf28053d72fe315559eb2ad86c5cdcd3b68718c380bbb65ff25c3f48ce9114e05dac1cba0178785fe0c736d704fd33845363ac3322d2da7de023dc9c98c29fc0029c716f30525b4db3b2733922beeae7aa1f5477ec09b826aeb32b137611da1b5b51116308523d5ac7847223ac7a9227915b093e015095425c6ba04f8e92096a77bc60af86592beaa54a78dcab2bf729b5a2e1621c7eb90174a6d88b8361055f260490cbc1759097d8e678cb821a23bab3db113c61e8fb84e7ecc8ff3142adf7378fcbef1597515c7fe229622d00408f1a17da5be6ca06943ed460b371e1419d37b06e2b61ae11034289665d03d2cefba42eb54d6c16b243cbb2d5060242eb6e8eaaca9200fde1fb804d0ee99891e141f4a20ed07fe1751ccf81106812c17e4d6370658779b7cb16e09dc3bb2cd2b5d8b8d75f7de855871943075a9f3f90324bcbf4a88f0ab2f7a08ad29dfbea5a37ada9b2c022d8710cedbe2ad6a72d31a6f8c9eaabdde86ef3a68bc37a156478333a44cfc83061caa760705b968581f1e7e25c8335cf1f39a1c815eb8adcd21cdb72886fcaef054a23a27aba3a3203b0463094f0a167f37edea65a2309379961a39d2777a3a6f8a3715c81b87aaf03c104e9af530a64905b06a95b80efaffdb2ece14ba8ebea27df19e71990c9e60f026459b835b34a3881019e65290a5197de45cc0760f4873cc7400cc90d4de41e72841f12931620480738482b8f01fd06bf6392eca8ec7bc1843905c7dbc54696e2b55ebda484a10c4704c617152c30887774b5b2b7df8dc9f5634af2217d9c03417c7c15d6b249490314fdf4e2c5a19f36a9bfd1e1b478ec0a686b73f238376f8229ead40b379d04840511118f43fa61717e9049fed5d6ff9fe6e201bb42060331c45ddea9ce210f2c8d2a155b7eb9dce69e1f58acc4f4a711f06a36b2dab33ac096e730bdc74fdd1da942dc34983aeeabdfcb0faf08aafa1bb940058d3ccab4b1f23a0d403d222f972171b4c9e26488da032b25de545757e022890385f81fc6d20c0216192622bac766a05430a7480ad827633b8a0ecfc7f1f91e4560271f56329e1617d94c47e1edb37d8e0730c202f666e8380cc7f0949a4f091ed5bc40b3018e9bd2b894e989f7b565b321b5fac0f469841c8f93a1d4e2b18d3a8bac798941243e5bb2c5f3380b84df5902b19a577ea759e4e3ae24124831a030fd9172d88136a2be4c2ca41118395ffa812c2614e3c23e7ad8e47045cc155ec8eee5139ea030d1f34944dca4b76cffdc2717fd812a3d2ddfc3a456ad380588c087e6aa3ea29820bc9ca6ca62bd68fcd24ebec1bf1076bf0cf09a431b7d0f9ec04606940fb2322371056f95e84bf891ec8a83a752d5acb43420aeba3598eb769cfd2180b110ae8acadc62c9f5b14facc9c757e57063ed5266070d711e9be982463221b569723d28cc3bd8dd0934246fb7200ec0c0970b54725d1a6f71ef4e39c7049d3f33c03e35bdcbbef47d6b178439f18ec2609d0c6a66ee3098f52d4c68f586da4fd7519a4beb66c9b2ac571748394ba5b9c6df76b2f827a81e46934cc815b3ccca12120719f1ba448606a5522013310ea5a561ea199583ad649cbee72c365600be01e14f1bae6eb9d052c6a19bf443eaec9f12078be69eb97c295962d35e30c2d37022d9151b0f158c14d47ce3cf03bea03ad27b603743aebc2ad2904e8ef4d118a3e25322c4d72e957870177ac4a905040701386e3ebabda05f804204a829020d04217ff5c0258b6099b8238fb1c1eb2ce4506579c359c4505ee35513b6c8f17dbd50080fdfb43d383da9f1b5c93eb4068fa113fdcbb67476cf187515f285ec9925608c1e9c54015b1973a4271ae1c2905188c65c863dd7825fed28862e5722c6b2f22b54b71c9b80434bf54809e6cbb344d6e25e1c49dc0e767e02a70e0967be6fd1dde09ab2547fa76a99fec81ca3496972846500d8a94719ad543539e373d7fd71d68ca3fed92cb129422bffe6c82f3ee6153a9033217f6bb0573c5a69b760e1d0ddc163c658d15984e7bf031a2e786f01f3b72e49655bb7b213edcf3c3b1519c00000000000000000000000000000000000000000000000000000000000000001089a14aa02d89b8715c22961632b091e42a0bda5ba57c9735469341b93fc3922ef8315461ed1054ec6dd9bb9326b32f62aeb08c6c2e32de52156d546b01682800000000000000000000000000000000000000000000000000000000000000001e56a7253a8928dfa3deaa003455f0c0f1eb22958dd01d244bf3874c494e5597277ea613db20430ab08999f0359322a11ededc283ccc075ccc80cb2d17c3037012b7df2a98d5c8e83e73486fe75cee02e2f02b862bf10cfff18225a2bc180ef300000000000000000000000000000000000000000000000000000000000000002c34a6302cae8803792f151ed07f97c4a1ec3140588ca6b727738beb949f764d2cd54784bc01255e717f127f01fe218ef444020f2db26f525ce69ceade79043e000000000000000000000000000000000000000000000000000000000000000026e5d74a38f6c3597f606b60fd173990563c92726253d599dff1374c4257fe75000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006b6ec8dc496fdd4e456fe396fb69db735a0041f40195904cf0f2b915deedd46130d4b8f20af0e9c9272e3a3857617307cc621f7acf84e939caf7a6771af43f528d96e492a0cb0e8ef7e7c4b6ee3c1d4bdb7494b9354288314e7d902620888d528d96e492a0cb0e8ef7e7c4b6ee3c1d4bdb7494b9354288314e7d902620888d5103cea95274c722baf9ef98ee3c1b15c84a499711f5aeb5bb1656ddfb1ffc9fd29308b017c003797ece6c5e6cf90033d2489ead0af474dfa2ed1b70c1668d2800596e8b2a9847769dbfb49770aff192b0a2b69b3ee64210f926b4020856f97602c3991b27c1408460431b1f3e0c597a696efb02ad369448343424c28bb4b864b151e1c69d12dff5737cb2aacc08bc232ea3ce93178bf8116e54cb7b8a0bc06670c4c94ac706d2fa2875c7cf2cc8bc3dd7b0e8581d7f65a345063c608a2b53e711605d90c7b7ac762b0f56a3b0b160f06fa181e77453c72d6b26807041a644ea00f310d9edf55c6771a375946c5d84667fcf59a331dc266737f92b3036bba769f03ad7a4f8aa28705055ae5dd3af10fb3a61d97609f8f2e2347b11ce69773c2492c99b7912364aca110d6d6399944299cd969022fb80c93c6a14760ba3f7988e108269640c06e46019b736fc83313f7f43bb8ae6dba00cf4d935b74be507c31e02d527335e8fccb7f914acad1f748b13b0f71ae1f1c8742c7bf72c80692d9f313063d60a5820d3ba2a48689592e8d48390f79d8fad64dd4cd9471296cbbed8c9b0648633949fecf1f0ad116d6919a3733b0881b3df66a58d1b77671d228893b2717f59de3bf0fcb998d8999c5f353887576351149bda449d35563245ea2807403011df19c668f4aa811a86b276f2f6dae21f3f00560e79d372d72008e3711fbf60e907fd9ba58b5c998424eb265b58d60241a07fe81c269891ba41963a555e2da261ff1f1382a762af6becc7c4f93f6ef462b3f12295291fdd793492dfc93cfbb106873328a19fbff851592a7bc7efcb9deaf0c4c7ebfd7cd142657e6b50fa09d2ca19a306b4ba70eb5b2827d7eee96a6b1d4a1b5ae95d7f4ab9a2473cb9ec0dc01b8dbb8722b7244f6dc243b6d704d43cf36ec46ee97b73384d5922d200a35e12a06a83e168e555689ceee3f5f16917ca9abd7d3a3720a9c45b591b2a6f32fc21352a301c8bf4a4515ea3a2bd81ff9263deb739992619bab77950635b55a257b0ad403c5dea2f4e8e42829417831fbf8fe15872131a30dd1a56e30cc5a8beb871856203089a911ff6226281fce338821661304243ebcc5015531d4b1c146421017a2e7f5e6fc9aced9947b3094db2abc6cfbf4fb83a3fea0ae51114beb2b12262e1ea56296eb8fba5d0d0fc582155937b3df3025abc65ade2db9fbda38f5f09d1215a4b31a33615a7b6b037e1723b1f84e4d85fee4b72e6fb7adfe0361cafbd92befe2c2df8a8a13ce43b156f9a30978a955e57f453449b2b253c2a8b80bbf770d6065fa704ea3b9d82b73a2b18a1db03f0ad42afa718d1fcbd5ee11674ad22903ad5a37b875353835da4f843197e52f928f28e4d8e3e45691eef1c8222e7755', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.7523078918457031 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [15.875]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where/where+pvariance/data.json b/examples/where/where+pvariance/data.json new file mode 100644 index 0000000..eccb5ba --- /dev/null +++ b/examples/where/where+pvariance/data.json @@ -0,0 +1,29 @@ +{ + "col_name": [ + 33.0, 75.0, 38.0, 38.0, 70.0, 44.0, 34.0, 67.0, 54.0, 78.0, 80.0, 21.0, + 41.0, 47.0, 57.0, 50.0, 65.0, 43.0, 51.0, 54.0, 62.0, 68.0, 45.0, 39.0, + 51.0, 48.0, 48.0, 42.0, 37.0, 75.0, 40.0, 48.0, 65.0, 26.0, 42.0, 53.0, + 51.0, 56.0, 74.0, 54.0, 55.0, 15.0, 58.0, 46.0, 64.0, 59.0, 39.0, 36.0, + 62.0, 39.0, 72.0, 32.0, 82.0, 76.0, 88.0, 51.0, 44.0, 35.0, 18.0, 53.0, + 52.0, 45.0, 64.0, 31.0, 32.0, 61.0, 66.0, 59.0, 50.0, 69.0, 44.0, 22.0, + 45.0, 45.0, 46.0, 42.0, 83.0, 53.0, 53.0, 69.0, 53.0, 33.0, 48.0, 49.0, + 34.0, 66.0, 29.0, 66.0, 52.0, 45.0, 83.0, 54.0, 53.0, 31.0, 71.0, 60.0, + 30.0, 33.0, 43.0, 26.0, 55.0, 56.0, 56.0, 54.0, 57.0, 68.0, 58.0, 61.0, + 62.0, 38.0, 52.0, 74.0, 76.0, 37.0, 42.0, 54.0, 38.0, 38.0, 30.0, 31.0, + 52.0, 41.0, 69.0, 40.0, 46.0, 69.0, 29.0, 28.0, 66.0, 41.0, 40.0, 36.0, + 52.0, 58.0, 46.0, 42.0, 85.0, 45.0, 70.0, 49.0, 48.0, 34.0, 18.0, 39.0, + 64.0, 46.0, 54.0, 42.0, 45.0, 64.0, 46.0, 68.0, 46.0, 54.0, 47.0, 41.0, + 69.0, 27.0, 61.0, 37.0, 25.0, 66.0, 30.0, 59.0, 67.0, 34.0, 36.0, 40.0, + 55.0, 58.0, 74.0, 55.0, 66.0, 55.0, 72.0, 40.0, 27.0, 38.0, 74.0, 52.0, + 45.0, 40.0, 35.0, 46.0, 64.0, 41.0, 50.0, 45.0, 42.0, 22.0, 25.0, 55.0, + 39.0, 58.0, 56.0, 62.0, 55.0, 65.0, 57.0, 34.0, 44.0, 47.0, 70.0, 60.0, + 34.0, 50.0, 43.0, 60.0, 66.0, 46.0, 58.0, 76.0, 40.0, 49.0, 64.0, 45.0, + 22.0, 50.0, 34.0, 44.0, 76.0, 63.0, 59.0, 36.0, 59.0, 47.0, 70.0, 64.0, + 44.0, 55.0, 50.0, 48.0, 66.0, 40.0, 76.0, 48.0, 75.0, 73.0, 55.0, 41.0, + 43.0, 50.0, 34.0, 57.0, 50.0, 53.0, 28.0, 35.0, 52.0, 52.0, 49.0, 67.0, + 41.0, 41.0, 61.0, 24.0, 43.0, 51.0, 40.0, 52.0, 44.0, 25.0, 81.0, 54.0, + 64.0, 76.0, 37.0, 45.0, 48.0, 46.0, 43.0, 67.0, 28.0, 35.0, 25.0, 71.0, + 50.0, 31.0, 43.0, 54.0, 40.0, 51.0, 40.0, 49.0, 34.0, 26.0, 46.0, 62.0, + 40.0, 25.0, 61.0, 58.0, 56.0, 39.0, 46.0, 53.0, 21.0, 57.0, 42.0, 80.0 + ] +} diff --git a/examples/where/where+pvariance/where+pvariance.ipynb b/examples/where/where+pvariance/where+pvariance.ipynb new file mode 100644 index 0000000..9471716 --- /dev/null +++ b/examples/where/where+pvariance/where+pvariance.ipynb @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [2]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x<45)\n", + " filtered_x = s.where(filter,x)\n", + " return s.pvariance(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path, verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 2, param_scale: 2, scale_input_multiplier: 10) ------------->\n", + "\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.059379578 | 0.118759155 | 0.118759155 | 0 | 0.059379578 | 0.118759155 | 0.118759155 | 0 | 0.0070518684 | 0.0012150826 | 0.0012150826 |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [2]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-344,240],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5411,\"total_const_size\":1205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709726229857}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.7671828269958496 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 48.75\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', 'c300000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1065bbab2d7e4fce3556bd53d3e73448bc061829f842bc0432db30c44b43063b0d309e9c10e2355a2067a46d7253dbeb307e922c88ce6bfc74c6f26b77904e2e0eb1a251f6c19f94019d517fb41ba8c04757904f47923b2bf777d96a85264a812125cb284a035fe0ccfcf01c5b1b4a837071f2d125d290f15fa18a337708fb760d887399f14a1dac35c8cdd0e015092be855878d8e80cf4edc8797ec9db0ed071b231a610aa89319c0dd5c5c4e3cbd6f37dfc04d8aa3db466a9247df80bdbf600d577377334ee6e940d755e433acdd204ce436cbda112d2ebaf58d8bcbb7acd01d55b7ddc298de9d72028f87b4345c07a6a11846a5c3a53e91dbcb40fc31836509fa50de714239fc67719d4c3e6b78f754f661992289e67b4fc13ac70ce9748a00f827ee57f6e7566dfa77f69830553801e3c4f5c2ea27c1050a90222244fa6121204f272046f605267b88d7522f7f034e1b49446d25ad37d3e76fa8fea0a8cc10418a4a920b30a59c948b6220ca953ad7b3a294605f15bddb92ff49cadac8f20692fbb0e50f18d42b22c9451da4586eeffad682992be2aa380d1a351a44ac30006b56e40a5d7297f95f7bf8004e974c2d2ca02c436e68dcdfc3fa4f719c82c82ac869eb82fa68558a1e839d7111594749587f88532f9499f22ccbf685caf53b0cd20378ad20505ceffe810efa3fd3bb863e75d0f9c4db4849285e854e581cfb29d8dc53cc0e3405ec1bbd71085effc569fdeff5f14c6f1a89d0a653e84ca9a4124512be9fc7c82bd2794ab192f9e1848c5cf01d8a523d7fba771bcba240719b1460914a9da92b04cd171ed8daebdc8387b7fdbd3b80f4a833ff5cbbb5ef54f42e5a4464dd31bc784950d0559fcc736c08037d7d2366ac7ec2ef7214c0a239e611b31f35cf08611e006f7a5551edaf4ca2fbe84dca631a1fe2baedaddead204b00ca8497f421b76ef4b91a5be4ae0132bc595dc63ee80d2b6aeb88a9791b175716583da73eb29056b2e6dbdfeef726f8632c4133cb1e5cdb09bac366eb1a6ea20ccf4dc648192aeedf4dd07ca248e258cfb91a3da364a0844774685d56700648294250c525741f941dec05d895776cea0b5f7bf48ac40c98e161c10d18edf97a2a1f21677a51381bbc9f44c7f46cf3648df77258355010fbd7fc39057e272bee25d73644a517c7c8f7e53bb13b21359a2ad6c37dd81267150027ded66a7516c12b090901cb668087ded7031b905ba0a29241e27ade4f466b0b38e2aea63b1c99154cd1b140953adbb6c8e1827c26670ca0ab8a891166f2cda41b8c477398211d09560b982e230f43282ed80f8ecddec337ecaf1052007245f627c37cd99ed0531f000f877c1a271e56d8c8aebc3959e799e5a03ba7a7a9317d0faf0980bec66203416450958f48cff16429439af7650d02069d41bdba2b742e7ad45416e4669f099e6fb145e42e8ea97feaf061e8f28e15563d14fb0abad4d45d9d8cc1f74d6f17abcaff9095ef459b8b67cc1172b14378d3fb7956563098fedf293bc41ebfb01bad4c93d0070dece869d732d1b6212e66107b382a12cbe25fb2c848f9285abb0f9d49aa924b8a3c2453e47c6985d4ec9f889a0c9e2cad96b9a24691385e630924e867c863eab0a2e92479d7d40a07ef7f15a1831ecd88f2fc599ce5cf10972e2abfd0628dcf2b998f902ea249b3350286b691b8b1da3daeddf34d31c0e3ce212f2a0757f8656df4ef6f36cb8bfddcee2abce7ed993e81aa7a4ab6bd4d844e032b3dbb201fd3103f1ca776f467440c15a67119c9409bd24c8506eb7916bbb9b70a0e7399df5a8f4389bc1bb4f15b524daa935b4f810fecf42a5ea9998eee6d7b15b8e63c26df37d186982ba6259b6c63f2813073604a6366804d2cdb1b4ebeb401e230303f1f8c53b562e2945b82ac1a0a5d54b3637e8b1bbceab7dd0fe590e51e41b33e82258d05d2ad3d262bd6d15e0f957a6a3fd564b97651642aa25c2da01cac5187763849ab1b0caf331c60850ac1ca0cea45af2c5e625b71bc5777046810bcad9b03892a2d23bc9e36bcd6c77b85acd5b45515a8b407210424253172d4290c542a2a0deb33dd3f7e7255b7f91ff46b9cd10fbe8ba0fefda0b5e99ba1290b7e888a938024948a648e9fb0368c2e8969dd5213ac9ab146e1cd47c937d3e8007d352f47c5689b24355d9cad18d7b0697636268a942068bd4701872f8539900095d6f711c884f2fca7ee5f71515f30e9812462be634d30d4521091272e19412240a27c24caf78c291e73c8c80a09e213bfff34cca58b39f8830a04ab4708b10f7bf70a963485f2f9127f029b12499876548aac03869c4e19404eecd284d30d2888362858807b1cf41f3b478ef67b83274618dec4fc2acdbb3e9ff523d6206e21e2a100c409bd04314c5969f063cc821877ec91020713ab0f9389663814cfcb095e3fac7ba2ae3a59582ad8dbdb93087121edf1d64bbb244c6dc7608e0aa366157e8d8b9a7fd62e40c980ef7c34ad5b887266605589360eebdb24479be28a6c21e86822382b715687a15d8824e775022432dc3a70e39a5538efcc9a3502b7b50a7bbe63fc48668f9a1cf6cc0d09ff0963e3542a02194a55d04762978bb8e4ce0993d8b50a00b9eea7dc9dc9dc531b9b2aed988976c83108696a67164ddfc75817c835ee948fd4278873c15a8ddaab067de09d5f675d4487e577ad29f78648f20388e6a7b6f08ee2fc81109b8f129238463a51bbdf0f753be9824836c0af722925d53c6ebbcabecd72185f66ff2fe5aee33e9a7b938dececdc25c527a80193501c269e81df970b71011d925becdfa17cbd2ea8f554cfdb1af6bec49e6ff48ecd2c2dc11dcb6ae7553f7465fac0f17c9b2c44c8578c5ab155ab11273e5b20832808f07cd3d069704e2bbdde2c97b3c34eb68d0ed4ff8df85d69fdf205ad5550f10d03a8a050008a48348cbfaabba381bdb459b5c6947ec979a59c74bdf21006c5072faea4f6fd846f066391784ca0f3a06e4ab567a96bf1dff7f0801674caa9d81f28587967dc68f30c74083cd980c78fe4726e16551ac59bc002b4c4e74b76240ce58c07a3881e506421de9d427a3ca14f5807dcaff8b9b9f3e7171e3a2e5e2a1339dff8ee5a40f3b7baa51e26c1df38869d6d6a91111b6b21a42d8e058baa1f0000000000000000000000000000000000000000000000000000000000000000195037959c54ff11d29294236dd626f75959ac4dfe428ea94c2f37817974733500f456cd6673d923681d9f68ede238b98cc0c9f4fcc8852c82ca95fcf61c2128000000000000000000000000000000000000000000000000000000000000000004614c879b15867922b594ad6ccf1bb5bb7affee156197ab2b180df3403627cf1be3143c4f5a5f5a804e7c5e3631361cb10988f4a0b6de494781d8729a44272c2922dcfa06c3cc50dc4bcff2946e7cfa46a9d588e84a861d6b4aa7ad11e663e8000000000000000000000000000000000000000000000000000000000000000011a02425d865698f561a9a042e52bdb75eef2b5eb2a3ce650a1ef5f70c22152b0db591ffb67696a86438117edcfbb348faa3d5a8b4c4269aca2ce056f5ea6faa0000000000000000000000000000000000000000000000000000000000000000305aa3099cfbef62102dcd4d537e5cfbdd821e1270456da36d5b0a503eb41a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e1ae52c98d08e14dc5b83a754d62e3f5bbc7ade338b284a462606f8464b2ae0b4a4822049265fd559edb6071651dd0f7e0a47035ad48bea95af96219726bd62902dd5a3a127f5a4b5ae343ef40d3a27cd5535d1ed413ba6faf5627716a56292902dd5a3a127f5a4b5ae343ef40d3a27cd5535d1ed413ba6faf5627716a562922eb0c22087533a57fabf17db8abed1e3f83b87d7cacbccb320a119c7ed279ca20674abec9fa073a5797f78d9b850b8d8b731f4aa0e8411d5f7a8b4c64b400ce029f4d35254aeb6ac96d9f49bab54bb9b06b4a6858e9e97542aef03a5f7f80052a367e495fb1d0f64afc691f9632079d2ab47dfe38ad656c6aefbeb27a76f1d00e8155f5fddd2597f6b70da16000564c61b59a9ce9777e7d769314216b95035303e81b6f654a30f4b6d412c5ab9d1f146c8b696b66e4006181393e25af73bfa71c0a276fe051dcdb2e606146be98a51316c8e8723908dcba5fe515928af3e8c112a60e0ee57790dd7591a53602296a60028689de6aaefd1ad7f4e85043258931089c4351eb9e9ddf3fd9dd97565c7c500ae76187194b184a388a8e82374553670f592e69e45dd1cb80f115d040f7cb07887f9fb1fab633a62cf9687b547d1bee2ca49389a721c73fec5656109220bad61516d4e49131a08777bb5842bfa501fc24068fed5cd2f8634d6d8f2cb61c2cdd4ed9dd73cc8db6a4f3ac5d701e2d941a12c55e53fd99abc5737cae914747ceb64649af118ca407c48e3923d2a70f9a190e019cf32ea718f0014422f755b1c9c0d1049f3bc6a65e36227aac7e4ad1926a12d096cc1ca3cd10b6c2a96ed133af8cc35ba08420b7c4221456ffa859ae9ea72307c1720e25eecf2fd193211306c501fd91a919f68c9d3bab57aee2bcc3509c23a5906592645b55585743933ea01f2cf9105b4d347796477a8df938a59a226a020f0896b94fd53e48833550dc0a48613431033265d311953e12f4da3bd4c11822faeecb3c8540d0ab400a123564021e985cfd49c3657d7d4a451c8d03212d39251ced5c591125b04c6ee2eb4a649338d03c6aaa34abdbca7d44ef1178a0e97c07fb1961f47f6bfb6ba3ec54c533045110313a704b832b2385a91505cc8fd9f20dff9bd2df2e97700304335d7049205f3dd94683332b6d29a78aada8147d1bcb0010041a51f0e3af1400fe0b3d2459098d9b1b6cda1bce8b2e0e59581ca322fe22b940a43c903bc3d68b3f140b1d0b884b0dbcf0ff3ef71fcf5fbd6da40b9c252bfa706fc2fa724306d79a850cc2ba9fbcb65f4f641ac98a98c07cd712f7ee032929c581b4f9c67d11f6ccec0ba000ce91b5e87b9f1c99610ec1745cf9746b01300781a3ff2e4f766e10f139c49dd06e33afe2a78afbd708cd23fa2cc39ca3e216ee3010a13620f8c3cfacf1715cf449f6041f900c21d2d65c6e71edb982a9a82c62aeda326c7f4af70603daca165e0ccf2527ae80aaa5602cd2ba945fdcda2504adae7423ff0c616d2b600f6d7f6aa5731bdac01e7dbd7d51a688dd088e32511501b328c0615e61ace6fa0f57b592abb2f69619d00d5d87ed4b91ff3adeb601', 'transcript_type': 'EVM'}\n", + "Time gen prf: 2.065513849258423 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [48.75]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+regression/data.json b/examples/where/where+regression/data.json similarity index 85% rename from examples/where+regression/data.json rename to examples/where/where+regression/data.json index d8672f8..e31e58e 100644 --- a/examples/where+regression/data.json +++ b/examples/where/where+regression/data.json @@ -1,6 +1,6 @@ { "x1": [ - 7.1, 3.2, 8.6, 3.5, 0.1, 9.7, 2.3, 5.7, 2.8, 10.0, 6.0, 6.0, 9.1, 1.7, 9.2, + 10.0, 7.1, 3.2, 8.6, 3.5, 0.1, 9.7, 2.3, 5.7, 2.8, 6.0, 6.0, 9.1, 1.7, 9.2, 0.2, 7.8, 3.7, 7.0, 2.5, 2.8, 5.9, 7.3, 2.9, 2.9, 3.5, 1.0, 9.7, 4.8, 0.9, 7.1, 3.6, 8.2, 3.0, 7.6, 4.2, 5.2, 8.1, 6.3, 9.3, 8.8, 8.2, 6.7, 4.9, 5.4, 9.8, 5.9, 7.1, 3.9, 9.3 @@ -12,7 +12,7 @@ 1.5, 2.1, 0.4, 4.3, 0.2 ], "y": [ - 18.5, 5.5, 18.2, 9.0, 4.0, 19.5, 11.7, 17.9, 15.3, 20.8, 12.5, 21.5, 32.5, + 20.8, 18.5, 5.5, 18.2, 9.0, 4.0, 19.5, 11.7, 17.9, 15.3, 12.5, 21.5, 32.5, 18.6, 23.9, 7.0, 16.9, 22.9, 31.0, 15.0, 8.5, 8.7, 28.9, 19.7, 12.5, 17.4, 7.2, 25.5, 21.4, 15.7, 15.5, 8.2, 28.2, 19.5, 25.5, 12.5, 20.3, 21.7, 22.1, 19.6, 32.2, 22.4, 20.6, 19.7, 20.8, 21.1, 21.8, 17.7, 21.1, 19.4 diff --git a/examples/where/where+regression/where+regression.ipynb b/examples/where/where+regression/where+regression.ipynb new file mode 100644 index 0000000..d1e61cd --- /dev/null +++ b/examples/where/where+regression/where+regression.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "\n", + "create_dummy(data_path, dummy_data_path)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [4]\n", + "selected_columns = ['x1', 'y']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result: tensor([[[ 0.0224],\n", + " [10.1720]]])\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:403: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " y = torch.where(y==MagicNumber, torch.tensor(0.0), y)\n", + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/ops.py:405: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " x_one = torch.where((x_one[:,:,0] ==MagicNumber).unsqueeze(-1), torch.tensor([0.0]*x_one.size()[2]), x_one)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " y = data[1]\n", + " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", + " filter = (y < 20)\n", + " # FIXME: not sure how to do filtering correctly here\n", + " filtered_x = s.where(filter, x)\n", + " filtered_y = s.where(filter, y)\n", + " return s.linear_regression(filtered_x, filtered_y)\n", + "\n", + "\n", + "error = 0.05\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 4, param_scale: 4, scale_input_multiplier: 10) ------------->\n", + "\n", + "+---------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+---------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.0055365562 | -0.004655361 | 0 | -0.011954308 | 0.0055365562 | 0.004655361 | 0.011954308 | 0 | 0.000054859283 | -0.001968241 | 0.001968241 |\n", + "+---------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result: tensor([[[0.9953],\n", + " [9.7380]]])\n", + "==== Generate & Calibrate Setting ====\n", + "scale: [4]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":4,\"param_scale\":4,\"scale_rebase_multiplier\":10,\"lookup_range\":[-400,512],\"logrows\":13,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":1518,\"total_const_size\":308,\"model_instance_shapes\":[[1],[1,2,1]],\"model_output_scales\":[0,4],\"model_input_scales\":[4,4],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709690487476}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 0.8701119422912598 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 1.0\n", + "witness result 2 : 9.75\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['78f113a919d1324cbee267b4320db42ee0170745a57013fa302f8139d7c36f18', '8dff683cfffbd97a4d94de7d897e03bb3f2fa18084beff4bbfbd152c2e2bcd16', '0100000000000000000000000000000000000000000000000000000000000000', '1000000000000000000000000000000000000000000000000000000000000000', '9c00000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x21ef95391b2d588bf775f55894b32a4d7edf4e217c2c651be6febf878c2c9e401d7adc17a42721973b6381a5531f475ef72c3102b6bb6e83c59b7ca22e8f2f682ddcc0a7d7399966703207ae49dbfcb08c2079fcbace9ab35d629ca47bc5585017d91e809e07a17aaa5683b5088bb15e179f985a07573e220a4c32559f1b6b881bc101e79216cda830c980a53ae6454f30c28e7350681a540b233ad4ab6a1a33083297b75bf0e375d76455c847afb6c3f5469fab912e2139b5f8b769cf9cd3822530ea793380a6c9667f3c3345e5b8da96d6c98329f1ca046c5bc7fba37f3fe0049abdff8d02e76da05a9f661545ceec2065bac8a4300751a5149f1f0606a4f51ded28eecc0395d18337dd17bebf7fe36478a7a8184b85149e0202462d94170d11c7d49a75c4ee2a260eb665edde4fc2d82b0308e1cdac5901fe164751fb16710e89a9155df1a811dd50ba1cae44a771d12cb6cf290d77aacfff4c1c6f6eac2601dbdddacc5d2ea089ba973d3a2ddf0198a72c470ce0031f0a1656134ff6db6926adcab04984d81bf7e58828e094863f4e659b6c5bd797032f8923ce2034fd4a1e1316795af57ff353b47f215b365b809bd4c27930b0eb426d4d7f781018c8f71fade12bb6d2c758f93f5ccbfbbaa9bcfd287ea7eacaa570720a76ae65b794dc1995d386a4b5a95cf5f214680b7ffe2f7eed36a1305f3e51e0107ae875758a9f1f5677bab5f27f9a43b8e4a9cb9e43f1489f97e1dbbf897cbdf1d1d879acfda226408482d78eca6d922267786d114453b2f6da5d095da1a9cd5d51ef5eba62f711622d116272d9739292773920bd435f46a7e863149f4b655141f6f93dbd31cc074a90dd0ceadb9f2545259611dce76d8e09ea7585afc93451b3be54942ddff5063d7d00bccef0233d5a6748442af61f2f80cc99bbd3b4fac6d6be382933dd932ae6efaa80e0a88079dd6c82624c22fc33f6800fd2a1b8aec05dd73808d33e931056e01094b06e7a04a5048256687fadc9680eda8e30e829300a4c7808aa0dc9064ca537a2d8f562261e98d0dccd2ea4570cfb55352f6f23511fbaa9b4fbeb74154e2d26c163d1862bb17ea2b214e42afb5f45e7b4eca803145b122b77d22bfa122d18b0ef2f652bba0cc43d2bd70106cee4748da29d609e07dc52fc3cec1c000d493f49b9a09e7f90ad9b458be6d0cc4d66c63b06bf71ceeb53d006cf0eeb351a98beafa997ab1b8a506371017893bfc49c3fff4eb97f8c3789496600e770511c6f505b0c3d57cc0d5e39650377b56b8a029a2677f9d65dd781ca51cc7513791b39eaf05e94040a3f4aa3d8bdff32e05387322942db8d1f39a2aa54fee5ad890a466fb2b49668e221ef8138d9539b8ae77049909755d096b86d9fa942fe55910041f4c4368de2964e214737cddea8806a88aeb0ff7a6d0ad67bf77ff94fa9d62b41bd78ac44c53f3d18ba9c978ef0e7612fba596fa29b02dab0025f1dd7895306920dc05e1568c358f3eb4f2f73d46e8e712ce9873dfea85b34d3282e4aec740b83a9ce1c0b75bb9aa8c237143b9bad7cd264ed9a08d52d51f87bf02dde71520637a2e5a0405fa505e437551498bef88d7d8df392d7a83ff8780848982335270c9138de5337015d0a23643f28d8a9c749eab7ca6fa046866a799cb937ee7f4f1b3db15bb7ea5bcd2da2fbaa54f688b49aef7edf46f5446e1064f5a89addb85b074568db0fcb28fc8d98bbfaebf88abad3576ed2535603df7904649502ef78d61fd2788820ca4d6267f46cb8254a43a0be1f92d453323d66fc5c87c5178b28c30bac536c668f08a13e12e3b76729dce17cd181f5f8fbd7db09ad66dd0be98b3d08c899683466879f4e555f019027077bc53a57452c6fcf8aa3bedbacf618799b03a6c4f3fac6965197f99f3619d9f9a22555ac15c98ad7db6d51fec3b66dbd581a7f214b2d63312b88f4a4ee26cd1eecd485f809d57203d518fb018d608509dd11841bc9cff1f47f45a9587d3c6f38d5bf1001644e7caaf437d7093ac4f75de00df3714c2c4e1408aeea6fef40df53ca6677075c4590a744dd1b6b4f3ee63b97281816e6e9b70794fe3bf1bc9422890a2f6900133185be1c873dd2ca9093cb0308fef9000a2f7255ee64a1ee483d24019799a7f2d265cdab6e962b24e182b97204d5bc647a6ed3ab48940c089c04455844a2d51133af11833c8bff228af126a318f9b062bde6c5213ce7bc5e827a3709f43c274a230c5f6faea81956c686176e1c3f4f0f57ece9bc172ef8c8c2452c8af5e6b81bd086ae81e31316b575a7cf4b14a9f7e5ed742932000caff2bd710592eef1083b99c63d879eb4dc144c9caa0e12b45e82c2fa1886c24fea7e5571950e49ea8344f1572f11b3bed206ad154313001660e6b4f3b17b60d9fa5b8079ecd25654d15056426590876b9588bd6003701d3e8eccf2d9c767e903f2ea8e424ba1afb2e81f35f807d83bac180b74957fb92b535338a72616a4f550c5b0ff10bdb6a32b36c740adc201a63ddb3b117a695200d7057d9feb499ca31f357e82603f4d2de2614251f0aaccf74f27af021ea1b908f3c7d0d55c14bac009205e18c2e8b540ef59c9b7cf0a9c8b21555c0664113113fa034760ae3dfbacaf5be93f42b6583f21affb8de46732c40081e3be7cac49244294fe35edcf203a0aabda0264f97ed3bf05f45266fbad310449f260d949521affa1ca535c396013c255e2187b23f294a286064de553afe964fd8266c14cf707a6f65b5f79a82749260ca676571b02228bf9a0b798058f7d1ee091035d4cfe1ee4a3d5f79a1531eeef5f970056ac122768c12e74a43cd991e45abe856701f31ffa890f44714274cdab8c887dc46bd320cd109c5cce8ef457f1ad12edfe95512f46196b2a2f2ae2bae1eb90b44b0d4d207f1668b66f769a8ec9bea96c4d34d10f99cb3dcba503bb929b2b6da90fca1c6ef77d89d7cee22728f983b280cd7b36102b0fc8c91ecbdc0455eefbb90157aee2aa56aa2a51dc1bba3731032623f0512c754586db97ad271e189d6f0034d3c7c53e3ec9060e71a26a1f4967c14610600ff5b0b40cdc76539301d6911108914a2b0054816e7330cda73b68e3d95a43872768924579f44a54d85df114b1ae29f5b7ca59d80db6ebf00e7c4a36d0243f1700000000000000000000000000000000000000000000000000000000000000000622cd7ec4e0f4293a9dc9f23885093c64df4a5f14e13bb02a88c3a3ec8920922ceba764911e4a3c2baf368f6c0fbe6240e7dbda86db4b5338fb7c68dbb8159100000000000000000000000000000000000000000000000000000000000000001f7c3f454562dde826f1d53446bad82f6583dff0dc82a55819958c8f4f7462fd03f76f23569010d97316e4c977eca78fed9756feb9fd1caa1619275727d48139180819c8baf2f5808144d765d2c0c0008113b52a20a356b0e1393309150ceeec00000000000000000000000000000000000000000000000000000000000000000df5f4bb1c510d16e57d1ffecf4503abb437e07a0e2d746b7feebaba4d6f4e7f25d209c9cf7b927026698fed8f948158592ddc4a98df0639da513f2cc1d5f1f30000000000000000000000000000000000000000000000000000000000000000161778c3cd8da82a4397bdc401d724e365413f18879c995ff1932011037bbf6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000797577f91fe35d183552a9e615c5a872cdcb2687583fb74b16ac1b36d322ea317f03009748527773583fc38b66702fceac0f1c6edfaecf17172e57f1b26e68207259fbc200ac86e556f30d8de645fd80361662b67432a0e04a6894f90d1e6a007259fbc200ac86e556f30d8de645fd80361662b67432a0e04a6894f90d1e6a013b625f8ce67a77bbf8f2075ad2bebbf8bfa02e7ee034d6ebdd6a0106ad2e2b71254e61cbb2ed40504fdd82e10f8ed5807d7a4deafcdc8c5a3909d96147bf9a10bc445cab98b8d4270fdc85dda85ba16083804f0cb12f4ce4c6c7921c50ea3de13fdbb32b28b78b478bab13b7edbed8cc0c4193cc415cb9e2a42fb7505aea40c1e21acb68313cf1620bc3624b3da78c96f4dd3f7268cb4df6934ddb27388cef622ff0bb16d8aa58980eb0e75bd6efacc2ad8f9c59d6eb4546baee58ed28d7a0b04eccc9cf74a19667b21a1df4aaf8a92f8aff04805fab5186d67509c9c0730190b9faff6b3d1db2daf67c8fbb4e533828c405ebe545fdb5caa540c3131326df21e9e4daf8d55ac898f49b796c2d229188370c29ce838a2d9d0501d90c164da2406c95a21fdc5251126b6dd4a74d0dbc52bc132124945ad88fcfd334e2db06c0508083336cee4a4669b0101369c43ccf50b7f0aa89a63af49700d478ef3fa87072d18c5dd1dd7be52d22255b05d6232b68f6ffab0fe1ad0fe747d3738e03972470ed36f6ca54aaf319a52dc4802406fee8afbe7b603f005aa4081af04cac0e4cc0831cd9f4d5daa8b601a55d2de18e5feeb2aa532bfe15cc08ed1087ad3ab7e371f68cca3febc50f1488328f21af2e77514003db9ed7b5b4c78931052579f218103c321a43c8a91ec8b09650919f86752a58aa305a571755f6fc9e3ce5dff1de809d9505404d1ba5ba0eccb7af03eb7789fca5c2d89bf63210ad81eee925fe733151e37a7db5729cad04a5d1f060f05cb99fec1d452212c2759675896fc84b1cd06beee0b0cdc55615107ed53bc39e05aef0ee3d50d2a4656a19b0a595dafca2a1d2bdfdbfe8e0381c896b75c5690a7f5d285697226e3ae071b38b25676783b141e47ef60d108f8db60f120b62528acb669c58daf4cbc4c5d7746d819d7811c71286d6be9f94db0aa39f82511789d15d938ff0db7d5d53489f1df07cd13be55db0eb9815816dda488482bd3f6c400502eb2b6c017b3c71825f21156b26868f02518280385b1f00a0585af475cb459133a1738e73e024d7a7b42768805aa8580a109b2f01cef328e9f2c0c4dcfcc7753ba1c9661c118ad908c37687c8e7f263c31133f19d9933f6c08b35d4dda135b3405e3004c1aab5076da77f1b59009d258aa27572798f3c8b02b239aff02a781cdf202c6e652ab1dfaaa6266a1415930886f007c1dec612b2a32c20af830019a5dc3de252adaa17ae7f3388473822704268c2549833cd561d6c43e8031c57f72b438e7408719bd09e3d6c886bdfd1dc1661b0a4c9b8f1b79c13cc345197b21938af2c968869aecd65ca582c047d2a8f27c7b090f327e16490adad90b8e0d32f0c576728be52442cf54f863162899fb47a979', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.0586259365081787 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [1.0, 9.75]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LinregressResult(slope=1.5701100032164679, intercept=9.543682881955615, rvalue=0.6564886189558647, pvalue=2.2600615271814128e-07, stderr=0.2604036418835096, intercept_stderr=1.631311911135312)\n", + "LinregressResult(slope=0.9953446553446554, intercept=9.738045954045953, rvalue=0.5646151788621693, pvalue=0.0014190381578603627, stderr=0.2800138217099284, intercept_stderr=1.473954985506841)\n" + ] + } + ], + "source": [ + "x1_arr= np.array([\n", + " 7.1, 3.2, 8.6, 3.5, 0.1, 9.7, 2.3, 5.7, 2.8, 10.0, 6.0, 6.0, 9.1, 1.7, 9.2,\n", + " 0.2, 7.8, 3.7, 7.0, 2.5, 2.8, 5.9, 7.3, 2.9, 2.9, 3.5, 1.0, 9.7, 4.8, 0.9,\n", + " 7.1, 3.6, 8.2, 3.0, 7.6, 4.2, 5.2, 8.1, 6.3, 9.3, 8.8, 8.2, 6.7, 4.9, 5.4,\n", + " 9.8, 5.9, 7.1, 3.9, 9.3\n", + " ])\n", + "y_arr =np.array([\n", + " 18.5, 5.5, 18.2, 9.0, 4.0, 19.5, 11.7, 17.9, 15.3, 20.8, 12.5, 21.5, 32.5,\n", + " 18.6, 23.9, 7.0, 16.9, 22.9, 31.0, 15.0, 8.5, 8.7, 28.9, 19.7, 12.5, 17.4,\n", + " 7.2, 25.5, 21.4, 15.7, 15.5, 8.2, 28.2, 19.5, 25.5, 12.5, 20.3, 21.7, 22.1,\n", + " 19.6, 32.2, 22.4, 20.6, 19.7, 20.8, 21.1, 21.8, 17.7, 21.1, 19.4\n", + " ])\n", + "from scipy.stats import linregress\n", + "print(linregress(x1_arr, y_arr))\n", + "print(linregress(x1_arr[y_arr<20], y_arr[y_arr<20]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where+stdev/data.json b/examples/where/where+stdev/data.json similarity index 100% rename from examples/where+stdev/data.json rename to examples/where/where+stdev/data.json diff --git a/examples/where/where+stdev/where+stdev.ipynb b/examples/where/where+stdev/where+stdev.ipynb new file mode 100644 index 0000000..4e441c7 --- /dev/null +++ b/examples/where/where+stdev/where+stdev.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [4]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:172: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n" + ] + } + ], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " # FIXME: should be replaced by `s.where` when it's available. Now the result may be incorrect\n", + " filter = (x > 30)\n", + " filtered_x = s.where(filter, x)\n", + " return s.stdev(filtered_x)\n", + "\n", + "error = 0.05\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 4, param_scale: 4, scale_input_multiplier: 10) ------------->\n", + "\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| 0.004298687 | 0.008597374 | 0.008597374 | 0 | 0.004298687 | 0.008597374 | 0.008597374 | 0 | 0.00003695742 | 0.00033692474 | 0.00033692474 |\n", + "+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n", + "scale: [4]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":4,\"param_scale\":4,\"scale_rebase_multiplier\":10,\"lookup_range\":[-480,1856],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5411,\"total_const_size\":1205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,4],\"model_input_scales\":[4],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709715704793}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.501824140548706 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 12.75\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['d1c9d1d20a90c893c336feef1eab835aefd88d5a68f68881423b9ce4635f520f', '0100000000000000000000000000000000000000000000000000000000000000', 'cc00000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x2fd27eb72cf9134bd245f150c1918a8a11da6da976183369abda06605b052ce901f35394f36a92b386e9a1b8f8b9fdeda4aab7f88bbbb6e0751dfaa61ad6fdf600116aa8cb230f447826266ff24f14e9ac28219bb5067fc65151a4920ab38f452f1ef26b2cfbe05ee63ac50312e0e5c9eb2f64de1602ec401fc882e225fb6997006073f27bc5b4c7681ca246426098c98c2056b5a9b6d1512491df205c565c470d6897acf317d0b11ceb1939cc9f6736f15754550f4a950a3ad87bfef84a1fd70a9b7e217c68457a470ca1a9490c4a79e9829710b9939374a152f4effe6cd8c501d4ac9754d0e108524184095fa88d1e471eeed63e0bd5dde0912abef09c8024063d2be7e044b8f10212dc7dffc62804cb686f0912295812cc4bb36a568429ee18d40fe1102ef3d2b3086d02cf5d809d853d121b25e28c006cfdc3bdec4d5f1a1b2152a8581765a276c4c07672e604121fa194558b8814fa314fc3a9f15ba7e21e05eaa44255e92698e96e3849dd49aa4a07a5f0873018d6450c93f710be24e516894bd6e1f5bf5dace8b985fb4988c83220e2badaaa8494c77684744d5d73ef24555e8683fb9da715823c5cb49aabaaeca89288f819c62572d4a559eff3619c0e659f7cc8f05e68a9b2a190b16add8dc59d1f7fa11643e19f098e2522f708f4062589a2c58c40081e3b84ac402aa22c36c425c94ae508cec1703d02cab32c9c0b470247f6c6d981dad183b584007130a7fd42d25b3f12f79645603177294abe22f03402373b79676a9a30271a6388f6ed95bf0fe027044573bed743377d40560f89ad2fe70baf9e3f770b572f985e8d8a650ee374310a68fbb1a7ddb2f2a8062a2a638b48d0582dbbf31129ce03529711470d5c436b0f1b10e6eb690452cbf20521b10ed5d9f25671199c115bcd0c15b4c3d801cbdd84a8dab2a8cdf31d4af82efa4b22fa2735a93b703393608b83ac8c024ba5904fb8e0cf6e193b6873b4011add22d22f477aa3db412a57c325e487f651cd4f9de5187f06fef8335435e39f0f2c07b429b0e66a2cb47420fa593be9e5de8ef1df61810534d556930c1d34f22aaf7ed8aef31f6de3f78eef2a5bd82fcb384f19b939b051aaef0f054c8d80720d69fd3cfaa2d263115c1843d50a071bc96cfec1dbf726be93105d9a168b13f30928f2854971267427f981b638b14c033a6e75dcfcbeaa0db4af715c0eb04237271ad806b772738588a7dd3877d8635172644f927074e6f4050c233e010eabf12a60dcb5d1095ef5b30eaa6c797ef1ade9836e008f255c4d14c9305adba37ba52bb31f67fb2fd610b3071d034616ca0982495d78ba88e092c26b9433606699b61720e3bb3d2bda96fedc569452128c01466f8c91b49abf94fb3fd215e48886740af56951872a08e959da5934b1c64d9cbfafd8914297275ecc05fe3c6519c6f216e8de54eebd015ce95c81b3bf472102770b7f884202c072b5aad9334b05320414fb9300912a950ff035c44bc705067198462acac64157500b76b08b54573142178c2997c92706da97009be1101e344e9754f30d282b7694de54c9842c7a19250c053d201fcc6aef062ba82a49cea72e9c8a9066aa36eec970f8aa697c3f03aa2dedb558799222d68facf4f5b337ca061033a2aff360f47ccc139b650d4452cd2f1966a02e20b5c7336e09e32418b8f82a540e58a9bfe66c7324f4f76d68217b21b50a06af4ac448e8b245538cc32770069b606dca0eb8746c9814ef1b4dbf9c12602c72256a3f5b1d0a606e6bd9cb7c1b7a566d8ee5b1f27dcc2a49f4e88d5722f394a2a59036b9f1cede4618b15a0fbe265b4d6f0cc4d4c7ee6cccbda17456177e849e36d6181d7793e8d97eaa9e5ef777b049802187f89a2c8a98e8046b40275643f95b1488f739e8b3ddf7212a8c69a56ce2efa0b90a8190c9cc38bf0fa7237efb29198aef8f9f0c1461544571c47e56032488ee595037f2f540da1918b32af5f9570b995c706213c4a63ec1060aa27d4dfc7e8bb7b2fd605ae4ad9d6b3c2403cfaaf4c5fae2b1da4a1dbafd01cedea630a66e60e060f241c0f697ef45eb2ab1cf918e0f7f6aa213b8c98e3609b1401d729fb7e312ade684b463be45f2251f458a9aa0186a3fd50caa2cfb6d40d25b8b09a6b9d2c4294921376b1368f2f2298b5c039f2d10e3bf619426bbf188d2005e769dd97196dd810627ce1fa28d172347f8aaff5a83dc29dffc9e7ed184db8f177bf68d26f71ef1337819f98e459d08605e4eeb0abdca09c0ebf5448931508a1e2027e2da3f69f02ee2c480176f32058a023e7c1ac1aa7ec5c7641b9804f92efd8e3a543b909b553e94c2a7e3b6f72f8ebb16ef188c70f7cc04d0df49eb009a1c3db5f601be50e3730ad73027207e0c04558fa8486b7d6a7af95787473198d82ec3102d58290e06d007c260a50fd01c1e0d756a18662c0017870a0c3b70eac8ccfc07767e15e75ec06b196eb84c4411c5e14d3b6fddf1c224e6cb2ec8a038a7277b834e8d019ea3e60ae09222e8ec1494230357a158fe71f971c2585a5c914536478622ba53e30aa8a1ee3ac91f8a00ac52e2393abaaaff00a36230a73e503739691e8100f1bf8c3ed117326e5e330ba8da82ac934a9e81b40e4332acfa591b3dd62d686038ea2bb028c3c616368c1b470a7d4286b405f78c14d2c4adae29941da269942d41bd666f03f4801cf866099177ba850f5aeec23694efec42e37ff5d154278ec8fcfc9fdfebd28f2af8331f0d13aa89ece588ef604c87af15b99060b3eb51ccf5076681e9d27516d41517166db5927a9e0dbe1ad30d9964b1cb7e32514483bc20df57888ae4334faae8b022b361b3fc5bbcab27fe32e5b1deff5a733cc41f3fa8b86394083baeec6c88472521908666c4dc45bcd85932ef657efbc57ee4cf050c866090c7e33d0e5a839f0b507a6aaa3c8dae9c8432393f47b497226642be2d61c044eb1c07246418ca1b050042149a10b9e068d24965ed02e2957a1a7f5397b8f9067c21771bf78fd04c12f1f765fae3cf3ab660f15c255e72680a6b5ca5d44a9a75a176165bddc0a82d0c46949dfe7e95bf5a775a6645e4548924e2cfd9eadf2791417880d9fd4789270c37f6aa92d45a1056232946ecfdd6ca3204b6bdd883b03333fc704e66655fe80000000000000000000000000000000000000000000000000000000000000000167e51b5fa5abe5c106d91fc6b82867caee150a3982a971aa6353caf740b73b31a98d737af8e11fcaa40a06b17ef618dd2e1c1b232af04d2c21f38125a442cec0000000000000000000000000000000000000000000000000000000000000000121e5bb2cd91bf556cc1f70c7a8aa6fb4c8cb6bb5e25cecfdd4ff9b639f4e202239087c96c0c162964735b289c127677161505cda44c0aa353159bc84c0f44a52869dc421df0c6cd5a59f6c22e028d89cc508076a4d72afd64b63c7026245f3f000000000000000000000000000000000000000000000000000000000000000001f7919a7fea3722a94fb15029336ec37c9baaa85a3848821d4d07d42a804cef2cb47b42eecb02b9c716829c08ead8aa4ec8f468980471271114fe21c457235400000000000000000000000000000000000000000000000000000000000000000eaf03422665b1a1a49b4429630ad97809f8ce1f14053997115f6f1acf71898d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142384461f5623a109fd772dd90af598131f7e4ea4f150a7a9a0ba0e2aab1712dabb1c213a98b7662e467de661bc0fff68a4c532b76fb542ef6af3cb149722411f5366b3b4a34bbf383e1053799badb844b4cf1520d926b35ada4b3cbbab2a411f5366b3b4a34bbf383e1053799badb844b4cf1520d926b35ada4b3cbbab2a428de69fb37f507b552faca8224d9e532677bb0577137e7638273a4262a8a339c15a26ae04ca26c4a64f43016bd597b574e034d4d05b20625c8430c7ffe6783ee00f8e45f48d3e4ad8c505a61659c2f2ffd7717fb3fdd48439a31f3c5349a560a203fd22687db373407e7f5d8f4e030ed2466c3997b4cc39fdbb75c414847d77d1525b2dda70213c4326ce78c5fbddebbccd6964c27663ae2ffffd16de1cd5ece1841782cdbff985b948d5cff53d28a9c6623ad9a9c6fc92e164d82b0dc687f6417683b30dc43838d1e9245b4b712b839b60775f52c5ca5f074f00c6c371f6e9522dbc26872f246bb01748b5252c1129eeb152d8fcbc890a5947cf505900810f6225e5b903eae7edc659afae82dcacf8b6e08892c15d0aff81fb593929d63cc071e1dcaac2cefdc2469a3c8cc412d8eedf2f5cfeb091d3ca11368aaeec1e1cdc108c4db78c25a6ee78c25f6b9eff588081bf80e4b08d13166e77ead57a8ff66011586a5215a4c3245d1475f590e1d7f9b693630dd837506ee2feaba0af57d402000c0a958953c03242e3cd064773b6753ffe5e6fd6ba0b66cf8b1cc7e894841252af8d0662352a2349b62a91d6081a197d04eb96473a271f5e1b1aaca0a99ba2b2bc08015ef58752707aeb84b01a616d2df1d450f00c7e4cacc36b79ae376a8712de06a66683084f84a500121a40e874824e31cbffc5decfb277ac38014434d6f0cd435a5aef9d8d8d591a546f4fffc0ada1e34ce0e13efcd36987db6327888462696f77b91b073c0bd00de113a09d67885f2fc42b86d551ea303dfd181f7eb8624a6cf14b64cdd714484990def428110f44a1592bab8ca830c056c31baa752322166237f8a22de558262eb44f239cff8bca57ac29c41144bc73b5a9ba1de89111e3dca900bb6b17005a3bc54f864b7d05d2afe88c69c114da85f7c1738a477892a20342ddc7a8bdfd324483aba435aafc1dd278ab4f401e3e6d368e40cc2ed910229e91e5e23792cadf6ebad8661770f5c7a5743945eabc19e12a256213e1b0a25e2e08c0b7c535421887f88b90e0d19ab2bce844191c6ccbd6cc1d74aae97621c78b10726f4a428bbf0b73e80396b4f393c0d93d81afe1df2506a7cfeb37ce11fc1b48330e34fb92663de1bb525299babb09ca6b5ed617a2c34d103e35ab5f013e525765a1e1a9c3e47cb5003e468565239223ffd072bdaaec363af04c8a37a0b7e910fd308ad8a12ce1553747ddaa3caa34869860516506e6df51583ff1fb72cc28f01b72a83a65ae85cdc27f5feefeb04209aede47eeb00953a7d76c0d6202165706005cc06b5aa973505c4e8fbaf4e72d9714ea63a3c7d4f9de5453add62064bc4bc11618e8ddce88b73931b2a00723e3249e6d77430f30df0b86fb8e1d8', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.7479989528656006 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [12.75]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/where/where+variance/data.json b/examples/where/where+variance/data.json new file mode 100644 index 0000000..eccb5ba --- /dev/null +++ b/examples/where/where+variance/data.json @@ -0,0 +1,29 @@ +{ + "col_name": [ + 33.0, 75.0, 38.0, 38.0, 70.0, 44.0, 34.0, 67.0, 54.0, 78.0, 80.0, 21.0, + 41.0, 47.0, 57.0, 50.0, 65.0, 43.0, 51.0, 54.0, 62.0, 68.0, 45.0, 39.0, + 51.0, 48.0, 48.0, 42.0, 37.0, 75.0, 40.0, 48.0, 65.0, 26.0, 42.0, 53.0, + 51.0, 56.0, 74.0, 54.0, 55.0, 15.0, 58.0, 46.0, 64.0, 59.0, 39.0, 36.0, + 62.0, 39.0, 72.0, 32.0, 82.0, 76.0, 88.0, 51.0, 44.0, 35.0, 18.0, 53.0, + 52.0, 45.0, 64.0, 31.0, 32.0, 61.0, 66.0, 59.0, 50.0, 69.0, 44.0, 22.0, + 45.0, 45.0, 46.0, 42.0, 83.0, 53.0, 53.0, 69.0, 53.0, 33.0, 48.0, 49.0, + 34.0, 66.0, 29.0, 66.0, 52.0, 45.0, 83.0, 54.0, 53.0, 31.0, 71.0, 60.0, + 30.0, 33.0, 43.0, 26.0, 55.0, 56.0, 56.0, 54.0, 57.0, 68.0, 58.0, 61.0, + 62.0, 38.0, 52.0, 74.0, 76.0, 37.0, 42.0, 54.0, 38.0, 38.0, 30.0, 31.0, + 52.0, 41.0, 69.0, 40.0, 46.0, 69.0, 29.0, 28.0, 66.0, 41.0, 40.0, 36.0, + 52.0, 58.0, 46.0, 42.0, 85.0, 45.0, 70.0, 49.0, 48.0, 34.0, 18.0, 39.0, + 64.0, 46.0, 54.0, 42.0, 45.0, 64.0, 46.0, 68.0, 46.0, 54.0, 47.0, 41.0, + 69.0, 27.0, 61.0, 37.0, 25.0, 66.0, 30.0, 59.0, 67.0, 34.0, 36.0, 40.0, + 55.0, 58.0, 74.0, 55.0, 66.0, 55.0, 72.0, 40.0, 27.0, 38.0, 74.0, 52.0, + 45.0, 40.0, 35.0, 46.0, 64.0, 41.0, 50.0, 45.0, 42.0, 22.0, 25.0, 55.0, + 39.0, 58.0, 56.0, 62.0, 55.0, 65.0, 57.0, 34.0, 44.0, 47.0, 70.0, 60.0, + 34.0, 50.0, 43.0, 60.0, 66.0, 46.0, 58.0, 76.0, 40.0, 49.0, 64.0, 45.0, + 22.0, 50.0, 34.0, 44.0, 76.0, 63.0, 59.0, 36.0, 59.0, 47.0, 70.0, 64.0, + 44.0, 55.0, 50.0, 48.0, 66.0, 40.0, 76.0, 48.0, 75.0, 73.0, 55.0, 41.0, + 43.0, 50.0, 34.0, 57.0, 50.0, 53.0, 28.0, 35.0, 52.0, 52.0, 49.0, 67.0, + 41.0, 41.0, 61.0, 24.0, 43.0, 51.0, 40.0, 52.0, 44.0, 25.0, 81.0, 54.0, + 64.0, 76.0, 37.0, 45.0, 48.0, 46.0, 43.0, 67.0, 28.0, 35.0, 25.0, 71.0, + 50.0, 31.0, 43.0, 54.0, 40.0, 51.0, 40.0, 49.0, 34.0, 26.0, 46.0, 62.0, + 40.0, 25.0, 61.0, 58.0, 56.0, 39.0, 46.0, 53.0, 21.0, 57.0, 42.0, 80.0 + ] +} diff --git a/examples/where/where+variance/where+variance.ipynb b/examples/where/where+variance/where+variance.ipynb new file mode 100644 index 0000000..1f6cbbe --- /dev/null +++ b/examples/where/where+variance/where+variance.ipynb @@ -0,0 +1,233 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import ezkl\n", + "import torch\n", + "from torch import nn\n", + "import json\n", + "import os\n", + "import time\n", + "import scipy\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import statistics\n", + "import math" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# init path\n", + "os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n", + "os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n", + "verifier_model_path = os.path.join('shared/verifier.onnx')\n", + "prover_model_path = os.path.join('prover/prover.onnx')\n", + "verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n", + "prover_compiled_model_path = os.path.join('prover/prover.compiled')\n", + "pk_path = os.path.join('shared/test.pk')\n", + "vk_path = os.path.join('shared/test.vk')\n", + "proof_path = os.path.join('shared/test.pf')\n", + "settings_path = os.path.join('shared/settings.json')\n", + "srs_path = os.path.join('shared/kzg.srs')\n", + "witness_path = os.path.join('prover/witness.json')\n", + "# this is private to prover since it contains actual data\n", + "sel_data_path = os.path.join('prover/sel_data.json')\n", + "# this is just dummy random value\n", + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "======================= ZK-STATS FLOW =======================" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = os.path.join('data.json')\n", + "dummy_data_path = os.path.join('shared/dummy_data.json')\n", + "create_dummy(data_path, dummy_data_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "scales = [2]\n", + "selected_columns = ['col_name']\n", + "commitment_maps = get_data_commitment_maps(data_path, scales)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Verifier/ data consumer side: send desired calculation\n", + "from zkstats.computation import computation_to_model, State\n", + "\n", + "\n", + "def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n", + " x = data[0]\n", + " filter = (x>50)\n", + " filtered_x = s.where(filter, x)\n", + " return s.variance(filtered_x)\n", + "\n", + "error = 0.01\n", + "_, verifier_model = computation_to_model(computation, error)\n", + "\n", + "verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path, verifier_model, verifier_model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Generate & Calibrate Setting ====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "\n", + " <------------- Numerical Fidelity Report (input_scale: 2, param_scale: 2, scale_input_multiplier: 10) ------------->\n", + "\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "| -0.057937622 | -0.115875244 | 0 | -0.115875244 | 0.057937622 | 0.115875244 | 0.115875244 | 0 | 0.006713536 | -0.0007207595 | 0.0007207595 |\n", + "+--------------+--------------+-----------+--------------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "scale: [2]\n", + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-280,304],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":5411,\"total_const_size\":1205,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709726428882}\n" + ] + } + ], + "source": [ + "# Prover/ data owner side\n", + "_, prover_model = computation_to_model(computation, error)\n", + "\n", + "prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== setting up ezkl ====\n", + "Time setup: 1.499417781829834 seconds\n", + "=======================================\n", + "==== Generating Witness ====\n", + "witness boolean: 1.0\n", + "witness result 1 : 80.5\n", + "==== Generating Proof ====\n", + "proof: {'instances': [['31220e5513f6e9b7d0f59d8f019cd197642a431b2136f0311abf6046c9006227', '0100000000000000000000000000000000000000000000000000000000000000', '4201000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x054ced15c315add18b81985f2666dcb5d698d3a2b8cfc49becd7357ee6456029201d1a76e4b42b06fe7e5336b0a58a9d4776d2ab031e217d1861a44ec467a38c224639376adb3faae8713682484d4bcd14161402d78d7b39a63d56f171b8151c155aa158d34381c842c649148aebbf264017fa50d80a614aa9eeb6429bd4790003878783966950b14363f79eb6274263bf542a8581e25325efe51d498f2cc6372eaf7f7890c5bb6dd386be7abd7fbced1bc29d44655a18b977d551b060101305174b0a262abd8f0556bd709f184727a28eb79db981c8b44f986ccaaa8d18cb7a0c39c268e75c447d0f696253973a4ff587080df55e9dc091440dac841295ac110178c9624fe94396932630f6542417ee647e704e6282bc69ea46e88d08ba4f24239e61555f1ecd0d69f343641b6dd83b764c121301e06481aa8ec255e8f68f8623f7bee2c22b6b53fd7bb4b9e2cff60f96e4648dd32bd3abb38e4ed2c850fdb21cc25e52702cf88b2e5bbf3a2500951168cfe6ce80387a2e967bf26ad500eda61952cec97d97038fa86e0d588ab9e42f566d25162d84df839b059b078a60fe5b2f3bc14b0fa7b1873df1ff131f35e782f4c40794b24cb1a425383ace18149df9000e9408c5fd0734f27b69f775e2365cc0cd01604d3091bec808b8a3cde6543729d67378a31340686b1418f05480c8d4e7baa988d43a629897dca0258538058e0a9d28c614d595e56f02109ebd877a480212032f432cf77e8cf27e8b9aeee2012aae00b373ea6d958dc8de28212786ded1fada9c121183176d8c4cb30e4bf106222667c71900c4e4b6c0d464017fc2e6455184a15d61b39acfcb94ecdf08a0a326b9f4af5d341b0a82433d4abf5a03bddee59ccb6231b0ce3f7fa6cf038cf2b00cf5f80c055134f5b9885ee34df739c63b7e069c5564d0122cc3a2e4e58363f30c1b0c1364c74e138a4a5be8ee097910eb825c9e3fc21b136ff733c6542f393502beae2e8ad925a1a0018f7412345aa0f23d34f722e063c856bdd0abaacb391708b86e2ceb0022b624f825b9546d328af03fa98a130d5e424117408c31d9c11518e25327fc25dc6dacb00821c987bbf6a3384c28fcd2da8f4f9498fccb83c2fe29ed7a9b943798c1b5f1ee21678eb203d12f2c503c6846170261b23fbcd31687063ca33d47b39e308049f5829caed5089c5adbf37cd29a6f237764fe915640521bf78a202a1a89b72c3250e261c741f4d2fe09ae4b0917ecd5b58409b8e352e9274aa9236b9d318f2e82276a4266d42d6dd07a1668e57ecda5a34ba0bf5290b014324b8235add6512ca1c3e46b9f80940e58a1419ba7be6be77bd2aa91c150a401ac34557d56c5b1d383ff1e9529712ae98663592234f59b9714322b332586e102817e2576f3dba2d8c6f1c9bb35c7e292099bcd5ba77106e04975b584bf0fe0113a71bb21a5df813ada5ff5a4cfcc8acde9c84e30d5998c396682bdaf40937f202b83c9ac18b8ac5e96d48c23a6191471f299be3d57cc3db952a4a607dbc2c919ba041cce7804081dadb66bcd224cc1b9c3c989d624e8c3d822d7189ba76e172e54e67399b02a137e6ff16b47a20d798887aef9f895e402375e18bc2a8e64f70307e351aafe2f924d68c295ca260c21aa0e1bbcbcdeb2c8a831f9e58f37ec6a22636e131fab6dd4ac3c066ce86278f0c044e1c0e54eb2828d2354eadebf8032071c5bee6ebd50ab84c5f2ce0474a2aa00e15a3660adf7de1265ab28a666cf4a1bdce1e470a21f481eb3aff8942633775964d9cad8682eafee227eb20561b69e2d478ecfd8a6c7582141ef656872f02c35c3d5f6e51632123dbb51bff1b9668c063bb442ece3987652c9678e6b0b9ecfd79f525f0fac9e1cc12bef84e2c0a9eb13c03f4974bd0060f94c92b6764ddc13b6aaebb6bd3dbb1bb36bc81ac58c9ffa07e64eecea953ecaf3332d47f9d1b81d4294ef410f837483de261d325f2ca53503f8def30ceefedd18a25314d83699c45b997fc0ec1c458ed13cabc1777dccfd04ebb8888ca9b12b0330f174db36c28577967ef18b4901d92044e6e3739542ea2925b06aab3d4f66e9efbd177ed709e02d507db9ca1723027910c1682f799229110466ac4c0d1538db3d524479ed71e447414eb480b9202fd73ced58034d4c9009c45956d5b55faf7ece16a1d6b8618736c3d8d4db623beeaed4d44cd795046a1d5fb56974c101105ea71ace72e9e0bfc9a5004cd929b15a5d7293433c54cc720e7d3a82603275bd018b3886340986ff1ba3e25236c1e9e93d344a533ebcc9f40c5ef75cb76635b2d419913f06cd11948db5060b1c6fa2a0d5a66bfea10a8e900846b989139a2a86bc69daed0f8805de805ed6c5e66c8e26965a88abb13ef8f61fbc10d6faa85f3f05596417eca9faa218aff5d4acbf324c5e45a9927f0a6aa30e51356a3c95d0b278bf1edbc5d9f2409b33f89af0ac7b025c4b7de063b2b9d2152ac4de4db4222d303c8a213e5670ab1345690444bd91cfec0735ec9e7622e523c71e72ec26d0d7b68ba9f5f404c15bf119b845b12e50732a66102463cb63251f83e4975aeea760a8c5ab1408bb52932b39e26b7192296f4ea8c085f61a74630d75718f52bfb9399f5be19d6b8a0cba1274b4581ed496ba18c0476d92761cd31a2479c258b5adcb6d8f2d98328ca4c5f58a4f45883b713c4373eae56d6215da24535ad566922eb63f8657ec5000508a5121c0876113820ce52d6c88b794293818c20f02b1a2b0457b3463ecd95c2ad77dc2e0c884e94e29c967a8ec416a7aa12d74b23bd96bf721319270590cba734ac7c537fe61e54b484827ea5a86b47eaf0cd90b28e51a3cf1a9fd75400fa3d009e6808f7ece1116e8c8e7df24d40bba65063171a599c477a6af8787ff762bc55c20379ecd9a43e72d3ca88e83674cdc112a87680baaa8c1546b0db4394082aa6f4dba1affe83f5facfdadcee1ccdcb22505baa711834d4fbc0b8a7d2e314e6c80cb67f28c07ba7724f2f904432e0d9bb41dba3a384092769fb89fd4b14adf757dfd212ebf1fdbbb7562c4c34c6aa7384008624dcfb5d1290bae0b39e4f41135640f2ed0029a61d08317b9c20dd2790f04021b0873c47b089781f798538fe3df705df2a58560409ee0ff56612d133867570000000000000000000000000000000000000000000000000000000000000000085c05bd96a37700ef0aeec877c20337da768b9f19dc680fede5957967390b971ab3561cd8e8a1a008dde52d9dee1f978117652e5f4aa00ca0376aec098501f000000000000000000000000000000000000000000000000000000000000000002e26e26bdf1872b2413dcc763af3f067d03530772cc9bd669e886b5e27235679081295cf9d825aeb850ae1cbdacc7976a1e69772ca6362899919ff10e5e45f38056547ea07537cdfe22ffc14edc7bbf5647822572be85c032e980fa8c8b5f3ab00000000000000000000000000000000000000000000000000000000000000000b83bad3fa02a97f4df5aae121c1b6d96f6a0300a79b33775db8568565147bf12f39c30961ade41b7fbd6deb21c1ef8c227d6cec8b1558e97f4efc54ec50f3e60000000000000000000000000000000000000000000000000000000000000000245cbd4a627fb262697db98c4675a1238fa3d5756bfb551aa2dd3324eb33220f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f4b763a1f6ec4ac603c06122e1aa91d8498f47eeacf391734754e64a79b43d72b053d77b99ef17ef4f88aebea993596ef880ea155e3206d434e7b2acc271b9318711fb8baed3b5e7deb644f74515f51423463cff583b5c38e8fdbce055a0d1618711fb8baed3b5e7deb644f74515f51423463cff583b5c38e8fdbce055a0d162dd37793124af5a64c9103173ac95295fb10d13de11a59d9fc6fbaa9bf6faa4a2213bdb21adf8b4ba8ccdc3c1623dc1666437694e71b7b748039f9e9873d97a612d6f4b9abdf60f44e282105a0de5f291a9b859642064f9782b9b88801adb17a20020cde3a0c0f01d8e9359fd413bf968e240db9153e27c5e116a92bf52d43732f9203027e2ec4e5c43bd414f5184f7820aa04b92fa956fd44997e8a132b946c0038caf71cd610c19375fedeec612f894417f10b4c3aaea912966dcc6934748926f91832c589bc7552eeb66294f132d58be6f4e70d8bde763524461054c7c657210e80defd2ccaaacedafbef835b35b50cddde247f6fce673273a8c226924823247adf20f333b848680b814db802f3ad3662ad426015447205c27e4908fc7e4e15cc8d3e02a5da9199bdbdd7098f4f9bafb2c29d05682bb2de88473dd41f33d715ecfe90905949a12d147567bb9aa327ccbb0fd417920e2e7c6a31240a8208f624f35f6a4525c31b5b3b3cc86fc58cf817edd0cc595d63988de3f2e48d9298620a5a5a0fdeb922817078b9ccba37e941ca2c6aceff6d2550fb88ec2b3338c050293ac2f01d6f687574084d9fe42db13d353e40bccd0c483655fa358109a9488e152200caeaf6524f17322f12937abdcd44b0e9a45f917fc4fc80c40d2bf15cfa166216be67c8ae923b18c32dec8ecaa6b598458d3697ad6143b6786b416c241326762078dc2c650a9cd1fffb2d06f74b3f7fbba8462c5d61e8462143f8360d7722374739b43af30d8b9a9fe8c267583982ea1f6ce420ff2116a0993ef913be8309a5f270d557075d501436f0eaae67fed451e1b920028dcc588d86318d6270b8300bf322b04ac5e1e387045d75dd2e5a2f8a40fcd5bb77a41f26a4d8943082c12ec8738f2bd0259cfbfa148b6aa7b42dae419e9c91b0225949a0a29e5d045a272785d3c1909b7d13804cdc9506fdda764eb2ee92bd986960fb09021f1a0742f211e87aed3483e07b421c3b5930ea4748a712520361a157814cd2fee2eebf8cc019fe5f96be8f81918517cf385f9f8f9640ea2290ff0c5a123c11687bcfd705bf1d3f84f584df7ce776181929427b06b0cb2b9e5ba923df97b96dcb104699582b2d22f0926ab225a66ea82e4a02428ea9989504fe8d4852d2fe13722bcb9bd96929e3258da0706cb61fa55b48abcea3a3013f6502320dc3cffc7d2413e3936dfc1b279c816d02035ae8f1b5d3f60fe98c80f059385ea30369249607d0993a860e2628ba90faef4201e5906fc2ee3a2811f4a0fa2dbff30aa4da00f28130632a6d1bae2b25e032ef6e682a5682e4bdad66771a887446331a8cc2384714545851bf0c1e133546333f90a32b3bbba0a510ac63b5ee8cb912f37a37aa4d7e275df063', 'transcript_type': 'EVM'}\n", + "Time gen prf: 1.750807762145996 seconds\n" + ] + } + ], + "source": [ + "# Here verifier & prover can concurrently call setup since all params are public to get pk.\n", + "# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n", + "setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n", + "\n", + "print(\"=======================================\")\n", + "# Prover generates proof\n", + "prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Verifier gets result: [80.5]\n" + ] + } + ], + "source": [ + "# Verifier verifies\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "print(\"Verifier gets result:\", res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/conftest.py b/tests/conftest.py index e2f4979..9ddc114 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -24,4 +24,4 @@ def column_2(): @pytest.fixture def scales(): - return [3] + return [6] diff --git a/tests/helpers.py b/tests/helpers.py index cc27ecb..9b5da0d 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -10,6 +10,11 @@ from zkstats.computation import IModel DEFAULT_POSSIBLE_SCALES = list(range(20)) +# Error tolerance between circuit and python implementation +ERROR_CIRCUIT_DEFAULT = 0.01 +ERROR_CIRCUIT_STRICT = 0.0001 +ERROR_CIRCUIT_RELAXED = 0.1 + def data_to_file(data_path: Path, data: list[torch.Tensor]) -> dict[str, list]: column_names = [f"columns_{i}" for i in range(len(data))] diff --git a/tests/test_computation.py b/tests/test_computation.py index 3193bf6..bcda762 100644 --- a/tests/test_computation.py +++ b/tests/test_computation.py @@ -1,3 +1,4 @@ +from typing import Type, Callable import statistics import torch @@ -17,9 +18,10 @@ from zkstats.ops import ( Covariance, Correlation, Regression, + Operation ) -from .helpers import assert_result, compute +from .helpers import assert_result, compute, ERROR_CIRCUIT_DEFAULT, ERROR_CIRCUIT_STRICT, ERROR_CIRCUIT_RELAXED def nested_computation(state: State, args: list[torch.Tensor]): @@ -129,3 +131,67 @@ def test_nested_computation(tmp_path, column_0: torch.Tensor, column_1: torch.Te assert isinstance(op_11, Mean) out_11 = statistics.mean([out_0, out_1, out_2, out_3, out_4, out_5, out_6, out_7, out_8, out_9, out_10.slope, out_10.intercept]) assert_result(torch.tensor(out_11), op_11.result) + + +@pytest.mark.parametrize( + "op_type, expected_func, error", + [ + (State.mean, statistics.mean, ERROR_CIRCUIT_DEFAULT), + (State.median, statistics.median, ERROR_CIRCUIT_DEFAULT), + (State.geometric_mean, statistics.geometric_mean, ERROR_CIRCUIT_DEFAULT), + # Be more tolerant for HarmonicMean + (State.harmonic_mean, statistics.harmonic_mean, ERROR_CIRCUIT_RELAXED), + # Be less tolerant for Mode + (State.mode, statistics.mode, ERROR_CIRCUIT_STRICT), + (State.pstdev, statistics.pstdev, ERROR_CIRCUIT_DEFAULT), + (State.pvariance, statistics.pvariance, ERROR_CIRCUIT_DEFAULT), + (State.stdev, statistics.stdev, ERROR_CIRCUIT_DEFAULT), + (State.variance, statistics.variance, ERROR_CIRCUIT_DEFAULT), + ] +) +def test_computation_with_where_1d(tmp_path, error, column_0, op_type: Callable[[Operation, torch.Tensor], torch.Tensor], expected_func: Callable[[list[float]], float], scales): + column = column_0 + def condition(_x: torch.Tensor): + return _x < 4 + + def where_and_op(state: State, args: list[torch.Tensor]): + x = args[0] + return op_type(state, state.where(condition(x), x)) + + state, model = computation_to_model(where_and_op, error) + compute(tmp_path, [column], model, scales) + + res_op = state.ops[-1] + filtered = column[condition(column)] + expected_res = expected_func(filtered.tolist()) + assert_result(res_op.result.data, expected_res) + + +@pytest.mark.parametrize( + "op_type, expected_func, error", + [ + (State.covariance, statistics.covariance, ERROR_CIRCUIT_RELAXED), + (State.correlation, statistics.correlation, ERROR_CIRCUIT_RELAXED), + ] +) +def test_computation_with_where_2d(tmp_path, error, column_0, column_1, op_type: Callable[[Operation, torch.Tensor], torch.Tensor], expected_func: Callable[[list[float]], float], scales): + def condition_0(_x: torch.Tensor): + return _x > 4 + + def where_and_op(state: State, args: list[torch.Tensor]): + x = args[0] + y = args[1] + condition_x = condition_0(x) + filtered_x = state.where(condition_x, x) + filtered_y = state.where(condition_x, y) + return op_type(state, filtered_x, filtered_y) + + state, model = computation_to_model(where_and_op, error) + compute(tmp_path, [column_0, column_1], model, scales) + + res_op = state.ops[-1] + condition_x = condition_0(column_0) + filtered_x = column_0[condition_x] + filtered_y = column_1[condition_x] + expected_res = expected_func(filtered_x.tolist(), filtered_y.tolist()) + assert_result(res_op.result.data, expected_res) diff --git a/tests/test_ops.py b/tests/test_ops.py index fc32899..83d519f 100644 --- a/tests/test_ops.py +++ b/tests/test_ops.py @@ -7,13 +7,7 @@ import torch from zkstats.ops import Mean, Median, GeometricMean, HarmonicMean, Mode, PStdev, PVariance, Stdev, Variance, Covariance, Correlation, Operation, Regression from zkstats.computation import IModel, IsResultPrecise -from .helpers import compute, assert_result - - -# Error tolerance between circuit and python implementation -ERROR_CIRCUIT_DEFAULT = 0.01 -ERROR_CIRCUIT_STRICT = 0.0001 -ERROR_CIRCUIT_RELAXED = 0.1 +from .helpers import compute, assert_result, ERROR_CIRCUIT_DEFAULT, ERROR_CIRCUIT_STRICT, ERROR_CIRCUIT_RELAXED @pytest.mark.parametrize( diff --git a/zkstats/computation.py b/zkstats/computation.py index 5a70647..a50d9c8 100644 --- a/zkstats/computation.py +++ b/zkstats/computation.py @@ -18,6 +18,7 @@ from .ops import ( Covariance, Correlation, Regression, + Where, IsResultPrecise, ) @@ -128,8 +129,20 @@ class State: Calculate the linear regression of x and y. The behavior should conform to [statistics.linear_regression](https://docs.python.org/3/library/statistics.html#statistics.linear_regression) in Python standard library. """ + # hence support only one x for now return self._call_op([x, y], Regression) + # WHERE operation + def where(self, filter: torch.Tensor, x: torch.Tensor) -> torch.Tensor: + """ + Calculate the where operation of x. The behavior should conform to `torch.where` in PyTorch. + + :param filter: A boolean tensor serves as a filter + :param x: A tensor to be filtered + :return: filtered tensor + """ + return self._call_op([filter, x], Where) + def _call_op(self, x: list[torch.Tensor], op_type: Type[Operation]) -> Union[torch.Tensor, tuple[IsResultPrecise, torch.Tensor]]: if self.current_op_index is None: op = op_type.create(x, self.error) @@ -212,3 +225,4 @@ def computation_to_model(computation: TComputation, error: float = DEFAULT_ERROR def forward(self, *x: list[torch.Tensor]) -> tuple[IsResultPrecise, torch.Tensor]: return computation(state, x) return state, Model + diff --git a/zkstats/core.py b/zkstats/core.py index e068e00..f54f261 100644 --- a/zkstats/core.py +++ b/zkstats/core.py @@ -45,7 +45,9 @@ def create_dummy(data_path: str, dummy_data_path: str) -> None: dummy_data ={} for col in data: # not use same value for every column to prevent something weird, like singular matrix - dummy_data[col] = np.round(np.random.uniform(1,30,len(data[col])),1).tolist() + min_col = min(data[col]) + max_col = max(data[col]) + dummy_data[col] = np.round(np.random.uniform(min_col,max_col,len(data[col])),1).tolist() json.dump(dummy_data, open(dummy_data_path, 'w')) @@ -250,12 +252,10 @@ def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_ # - is a tuple (is_in_error, result) # - is_valid is True # Sanity check - # is_in_error = ezkl.vecu64_to_float(outputs[0], output_scales[0]) is_in_error = ezkl.felt_to_float(outputs[0], output_scales[0]) assert is_in_error == 1.0, f"result is not within error" result_arr = [] for index in range(len(outputs)-1): - # result_arr.append(ezkl.vecu64_to_float(outputs[index+1], output_scales[1])) result_arr.append(ezkl.felt_to_float(outputs[index+1], output_scales[1])) return result_arr diff --git a/zkstats/ops.py b/zkstats/ops.py index 768ac69..7d783c7 100644 --- a/zkstats/ops.py +++ b/zkstats/ops.py @@ -6,6 +6,7 @@ import torch # boolean: either 1.0 or 0.0 IsResultPrecise = torch.Tensor +MagicNumber = 9999999 class Operation(ABC): @@ -22,15 +23,28 @@ class Operation(ABC): ... +class Where(Operation): + @classmethod + def create(cls, x: list[torch.Tensor], error: float) -> 'Where': + # here error is trivial, but here to conform to other functions + return cls(torch.where(x[0],x[1], MagicNumber ),error) + def ezkl(self, x:list[torch.Tensor]) -> IsResultPrecise: + bool_array = torch.logical_or(x[1]==self.result, torch.logical_and(torch.logical_not(x[0]), self.result==MagicNumber)) + # print('sellll: ', self.result) + return torch.sum(bool_array.float())==x[1].size()[1] + + class Mean(Operation): @classmethod def create(cls, x: list[torch.Tensor], error: float) -> 'Mean': - return cls(torch.mean(x[0]), error) + # support where statement, hopefully we can use 'nan' once onnx.isnan() is supported + return cls(torch.mean(x[0][x[0]!=MagicNumber]), error) def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] - size = x.size() - return torch.abs(torch.sum(x)-size[1]*self.result)<=torch.abs(self.error*size[1]*self.result) + size = torch.sum((x!=MagicNumber).float()) + x = torch.where(x==MagicNumber, 0.0, x) + return torch.abs(torch.sum(x)-size*self.result)<=torch.abs(self.error*self.result*size) def to_1d(x: torch.Tensor) -> torch.Tensor: @@ -51,6 +65,7 @@ class Median(Operation): # we want in our context. However, we tend to have x as a `[1, len(x), 1]`. In this case, # we need to flatten `x` to 1d array to get the correct `lower` and `upper`. x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] super().__init__(torch.tensor(np.median(x_1d)), error) sorted_x = np.sort(x_1d) len_x = len(x_1d) @@ -63,21 +78,25 @@ class Median(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] + old_size = x.size()[1] + size = torch.sum((x!=MagicNumber).float()) + min_x = torch.min(x) + x = torch.where(x==MagicNumber,min_x-1, x) + # since within 1%, we regard as same value - count_less = torch.sum((x < self.result).float()) + count_less = torch.sum((x < self.result).float())-(old_size-size) count_equal = torch.sum((x==self.result).float()) - len = x.size()[1] - half_len = torch.floor(torch.div(len, 2)) - - less_cons = count_lesshalf_len + half_size = torch.floor(torch.div(size, 2)) + + less_cons = count_lesshalf_size # For count_equal == 0 lower_exist = torch.sum((x==self.lower).float())>0 - lower_cons = torch.sum((x>self.lower).float())==half_len + lower_cons = torch.sum((x>self.lower).float())==half_size upper_exist = torch.sum((x==self.upper).float())>0 - upper_cons = torch.sum((x 'GeometricMean': x_1d = to_1d(x[0]) + x_1d = x_1d[x_1d!=MagicNumber] result = torch.exp(torch.mean(torch.log(x_1d))) return cls(result, error) def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: # Assume x is [1, n, 1] x = x[0] - size = x.size()[1] + size = torch.sum((x!=MagicNumber).float()) + x = torch.where(x==MagicNumber, 1.0, x) return torch.abs((torch.log(self.result)*size)-torch.sum(torch.log(x)))<=size*torch.log(torch.tensor(1+self.error)) @@ -103,13 +125,16 @@ class HarmonicMean(Operation): @classmethod def create(cls, x: list[torch.Tensor], error: float) -> 'HarmonicMean': x_1d = to_1d(x[0]) + x_1d = x_1d[x_1d!=MagicNumber] result = torch.div(1.0,torch.mean(torch.div(1.0, x_1d))) return cls(result, error) def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: # Assume x is [1, n, 1] x = x[0] - size = x.size()[1] + size = torch.sum((x!=MagicNumber).float()) + # just make it really big so that 1/x goes to zero for element that gets filtered out + x = torch.where(x==MagicNumber, x*x, x) return torch.abs((self.result*torch.sum(torch.div(1.0, x))) - size)<=torch.abs(self.error*size) @@ -131,15 +156,16 @@ def mode_within(data_array: torch.Tensor, error: float) -> torch.Tensor: max_sum_freq = sum_freq return mode -# TODO: Add mode_within, different from traditional mode + +# TODO: Add class Mode_within , different from traditional mode # class Mode_(Operation): # @classmethod # def create(cls, x: list[torch.Tensor], error: float) -> 'Mode': # x_1d = to_1d(x[0]) - # # Mode has no result_error, just num_error which is the - # # deviation that two numbers are considered the same. (Make sense because + # # Mode has no result_error, just num_error which is the + # # deviation that two numbers are considered the same. (Make sense because # # if some dataset has all different data, mode will be trivial if this is not the case) - # # This value doesn't depend on any scale, but on the dataset itself, and the intention + # # This value doesn't depend on any scale, but on the dataset itself, and the intention # # the evaluator. For example 0.01 means that data is counted as the same within 1% value range. # # If wanting the strict definition of Mode, can just put this error to be 0 @@ -156,13 +182,13 @@ def mode_within(data_array: torch.Tensor, error: float) -> torch.Tensor: # for ele in x[0] # ], dtype = torch.float32) # return torch.sum(_result) == size - + class Mode(Operation): @classmethod def create(cls, x: list[torch.Tensor], error: float) -> 'Mode': x_1d = to_1d(x[0]) - + x_1d = x_1d[x_1d!=MagicNumber] # Here is traditional definition of Mode, can just put this num_error to be 0 result = torch.tensor(mode_within(x_1d, 0)) return cls(result, error) @@ -170,18 +196,18 @@ class Mode(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: # Assume x is [1, n, 1] x = x[0] - size = x.size()[1] - count_equal = torch.sum((torch.abs(x-self.result)<=torch.abs(self.error*self.result)).float()) - _result = torch.tensor([ - torch.sum((torch.abs(x-ele[0])<=torch.abs(self.error*ele[0])).float())<= count_equal - for ele in x[0] - ], dtype = torch.float32) - return torch.sum(_result) == size + min_x = torch.min(x) + old_size = x.size()[1] + x = torch.where(x==MagicNumber, min_x-1, x) + count_equal = torch.sum((x==self.result).float()) + result = torch.tensor([torch.logical_or(torch.sum((x==ele[0]).float())<=count_equal, min_x-1 ==ele[0]) for ele in x[0]]) + return torch.sum(result) == old_size class PStdev(Operation): def __init__(self, x: torch.Tensor, error: float): x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] self.data_mean = torch.nn.Parameter(data=torch.mean(x_1d), requires_grad=False) result = torch.sqrt(torch.var(x_1d, correction = 0)) super().__init__(result, error) @@ -192,16 +218,19 @@ class PStdev(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] - size = x.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size*(self.data_mean))<=torch.abs(self.error*size*self.data_mean) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + size = torch.sum((x!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size*(self.data_mean))<=torch.abs(self.error*self.data_mean*size) + x_fil_mean = torch.where(x==MagicNumber, self.data_mean, x) return torch.logical_and( - torch.abs(torch.sum((x-self.data_mean)*(x-self.data_mean))-self.result*self.result*size)<=torch.abs(2*self.error*self.result*self.result*size),x_mean_cons + torch.abs(torch.sum((x_fil_mean-self.data_mean)*(x_fil_mean-self.data_mean))-self.result*self.result*size)<=torch.abs(2*self.error*self.result*self.result*size),x_mean_cons ) class PVariance(Operation): def __init__(self, x: torch.Tensor, error: float): x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] self.data_mean = torch.nn.Parameter(data=torch.mean(x_1d), requires_grad=False) result = torch.var(x_1d, correction = 0) super().__init__(result, error) @@ -212,16 +241,20 @@ class PVariance(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] - size = x.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size*(self.data_mean))<=torch.abs(self.error*size*self.data_mean) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + size = torch.sum((x!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size*(self.data_mean))<=torch.abs(self.error*self.data_mean*size) + x_fil_mean = torch.where(x==MagicNumber, self.data_mean, x) return torch.logical_and( - torch.abs(torch.sum((x-self.data_mean)*(x-self.data_mean))-self.result*size)<=torch.abs(self.error*self.result*size), x_mean_cons + torch.abs(torch.sum((x_fil_mean-self.data_mean)*(x_fil_mean-self.data_mean))-self.result*size)<=torch.abs(self.error*self.result*size), x_mean_cons ) + class Stdev(Operation): def __init__(self, x: torch.Tensor, error: float): x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] self.data_mean = torch.nn.Parameter(data=torch.mean(x_1d), requires_grad=False) result = torch.sqrt(torch.var(x_1d, correction = 1)) super().__init__(result, error) @@ -232,16 +265,19 @@ class Stdev(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] - size = x.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size*(self.data_mean))<=torch.abs(self.error*size*self.data_mean) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + size = torch.sum((x!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size*(self.data_mean))<=torch.abs(self.error*self.data_mean*size) + x_fil_mean = torch.where(x==MagicNumber, self.data_mean, x) return torch.logical_and( - torch.abs(torch.sum((x-self.data_mean)*(x-self.data_mean))-self.result*self.result*(size - 1))<=torch.abs(2*self.error*self.result*self.result*(size - 1)), x_mean_cons + torch.abs(torch.sum((x_fil_mean-self.data_mean)*(x_fil_mean-self.data_mean))-self.result*self.result*(size - 1))<=torch.abs(2*self.error*self.result*self.result*(size - 1)), x_mean_cons ) class Variance(Operation): def __init__(self, x: torch.Tensor, error: float): x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] self.data_mean = torch.nn.Parameter(data=torch.mean(x_1d), requires_grad=False) result = torch.var(x_1d, correction = 1) super().__init__(result, error) @@ -252,17 +288,23 @@ class Variance(Operation): def ezkl(self, x: list[torch.Tensor]) -> IsResultPrecise: x = x[0] - size = x.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size*(self.data_mean))<=torch.abs(self.error*size*self.data_mean) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + size = torch.sum((x!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size*(self.data_mean))<=torch.abs(self.error*self.data_mean*size) + x_fil_mean = torch.where(x==MagicNumber, self.data_mean, x) return torch.logical_and( - torch.abs(torch.sum((x-self.data_mean)*(x-self.data_mean))-self.result*(size - 1))<=torch.abs(self.error*self.result*(size - 1)), x_mean_cons + torch.abs(torch.sum((x_fil_mean-self.data_mean)*(x_fil_mean-self.data_mean))-self.result*(size - 1))<=torch.abs(self.error*self.result*(size - 1)), x_mean_cons ) + + class Covariance(Operation): def __init__(self, x: torch.Tensor, y: torch.Tensor, error: float): x_1d = to_1d(x) + x_1d = x_1d[x_1d!=MagicNumber] y_1d = to_1d(y) + y_1d = y_1d[y_1d!=MagicNumber] x_1d_list = x_1d.tolist() y_1d_list = y_1d.tolist() @@ -278,34 +320,37 @@ class Covariance(Operation): def ezkl(self, args: list[torch.Tensor]) -> IsResultPrecise: x, y = args[0], args[1] - size_x = x.size()[1] - size_y = y.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size_x*(self.x_mean))<=torch.abs(self.error*size_x*self.x_mean) - y_mean_cons = torch.abs(torch.sum(y)-size_y*(self.y_mean))<=torch.abs(self.error*size_y*self.y_mean) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + y_fil_0 = torch.where(y==MagicNumber, 0.0, y) + size_x = torch.sum((x!=MagicNumber).float()) + size_y = torch.sum((y!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size_x*(self.x_mean))<=torch.abs(self.error*self.x_mean*size_x) + y_mean_cons = torch.abs(torch.sum(y_fil_0)-size_y*(self.y_mean))<=torch.abs(self.error*self.y_mean*size_y) + x_fil_mean = torch.where(x==MagicNumber, self.x_mean, x) + # only x_fil_mean is enough, no need for y_fil_mean since it will multiply 0 anyway return torch.logical_and( - torch.logical_and(x_mean_cons,y_mean_cons), - torch.abs(torch.sum((x-self.x_mean)*(y-self.y_mean))-(size_x-1)*self.result) torch.Tensor: - size_x = x.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size_x*(x_mean))<=torch.abs(error*size_x*x_mean) - return (torch.logical_and(torch.abs(torch.sum((x-x_mean)*(x-x_mean))-x_std*x_std*(size_x-1))<=torch.abs(2*error*x_std*x_std*(size_x-1)),x_mean_cons),x_std) - - -def covariance(x: torch.Tensor, y: torch.Tensor, cov: torch.Tensor, x_mean: torch.Tensor, y_mean: torch.Tensor, error: float) -> torch.Tensor: - size_x = x.size()[1] - size_y = y.size()[1] - x_mean_cons = torch.abs(torch.sum(x)-size_x*(x_mean))<=torch.abs(error*size_x*(x_mean)) - y_mean_cons = torch.abs(torch.sum(y)-size_y*(y_mean))<=torch.abs(error*size_y*(y_mean)) - return (torch.logical_and(torch.logical_and(x_mean_cons,y_mean_cons), torch.abs(torch.sum((x-x_mean)*(y-y_mean))-(size_x-1)*(cov)) torch.Tensor: + return ( + torch.abs(torch.sum((x_fil_mean-x_mean)*(x_fil_mean-x_mean))-x_std*x_std*(size_x - 1))<=torch.abs(2*error*x_std*x_std*(size_x - 1)) + , x_std) +# refer other constraints to correlation function, not put here since will be repetitive +def covariance_for_corr(x_fil_mean: torch.Tensor,y_fil_mean: torch.Tensor,size_x:torch.Tensor, size_y:torch.Tensor, cov: torch.Tensor, x_mean: torch.Tensor, y_mean: torch.Tensor, error: float) -> torch.Tensor: + return ( + torch.abs(torch.sum((x_fil_mean-x_mean)*(y_fil_mean-y_mean))-(size_x-1)*cov) IsResultPrecise: x, y = args[0], args[1] - bool1, cov = covariance(x, y, self.cov, self.x_mean, self.y_mean, self.error) - bool2, x_std = stdev(x, self.x_std, self.x_mean, self.error) - bool3, y_std = stdev(y, self.y_std, self.y_mean, self.error) + x_fil_0 = torch.where(x==MagicNumber, 0.0, x) + y_fil_0 = torch.where(y==MagicNumber, 0.0, y) + size_x = torch.sum((x!=MagicNumber).float()) + size_y = torch.sum((y!=MagicNumber).float()) + x_mean_cons = torch.abs(torch.sum(x_fil_0)-size_x*(self.x_mean))<=torch.abs(self.error*self.x_mean*size_x) + y_mean_cons = torch.abs(torch.sum(y_fil_0)-size_y*(self.y_mean))<=torch.abs(self.error*self.y_mean*size_y) + x_fil_mean = torch.where(x==MagicNumber, self.x_mean, x) + y_fil_mean = torch.where(y==MagicNumber, self.y_mean, y) + + miscel_cons = torch.logical_and(size_x==size_y, torch.logical_and(x_mean_cons, y_mean_cons)) + bool1, cov = covariance_for_corr(x_fil_mean,y_fil_mean,size_x, size_y, self.cov, self.x_mean, self.y_mean, self.error) + bool2, x_std = stdev_for_corr( x_fil_mean, size_x, self.x_std, self.x_mean, self.error) + bool3, y_std = stdev_for_corr( y_fil_mean, size_y, self.y_std, self.y_mean, self.error) bool4 = torch.abs(cov - self.result*x_std*y_std)<=self.error*cov - return torch.logical_and(torch.logical_and(bool1, bool2),torch.logical_and(bool3, bool4)) + return torch.logical_and(torch.logical_and(torch.logical_and(bool1, bool2),torch.logical_and(bool3, bool4)), miscel_cons) def stacked_x(args: list[float]): @@ -336,12 +391,19 @@ def stacked_x(args: list[float]): class Regression(Operation): def __init__(self, xs: list[torch.Tensor], y: torch.Tensor, error: float): - x_1ds = [to_1d(i).tolist() for i in xs] - y_1d = to_1d(y).tolist() + x_1ds = [to_1d(i) for i in xs] + fil_x_1ds=[] + for x_1 in x_1ds: + fil_x_1ds.append((x_1[x_1!=MagicNumber]).tolist()) + x_1ds = fil_x_1ds + + y_1d = to_1d(y) + y_1d = (y_1d[y_1d!=MagicNumber]).tolist() x_one = stacked_x(x_1ds) result_1d = np.matmul(np.matmul(np.linalg.inv(np.matmul(x_one.transpose(), x_one)), x_one.transpose()), y_1d) result = torch.tensor(result_1d, dtype = torch.float32).reshape(1, -1, 1) + print('result: ', result) super().__init__(result, error) @classmethod @@ -353,6 +415,9 @@ class Regression(Operation): def ezkl(self, args: list[torch.Tensor]) -> IsResultPrecise: # infer y from the last parameter y = args[-1] + y = torch.where(y==MagicNumber, torch.tensor(0.0), y) x_one = torch.cat((*args[:-1], torch.ones_like(args[0])), dim=2) + x_one = torch.where((x_one[:,:,0] ==MagicNumber).unsqueeze(-1), torch.tensor([0.0]*x_one.size()[2]), x_one) x_t = torch.transpose(x_one, 1, 2) return torch.sum(torch.abs(x_t @ x_one @ self.result - x_t @ y)) <= self.error * torch.sum(torch.abs(x_t @ y)) +