From e2d43a338f3a81de63a710b37e699e90eea731ac Mon Sep 17 00:00:00 2001 From: Benoit Chevallier-Mames Date: Fri, 2 Sep 2022 12:42:53 +0200 Subject: [PATCH] chore: fixing broken links --- deps_licenses/licenses_linux_user.txt.md5 | 2 +- deps_licenses/licenses_mac_user.txt.md5 | 2 +- docs/advanced-topics/compilation.md | 4 +- docs/advanced-topics/quantization.md | 2 +- docs/autogenerated/pdoc.pdf | Bin 327472 -> 327473 bytes docs/developer-guide/api.md | 3 +- poetry.lock | 49 +--------------------- script/doc_utils/api_doc_pdf.sh | 11 +++-- script/make_utils/setup_os_deps.sh | 1 + 9 files changed, 13 insertions(+), 61 deletions(-) diff --git a/deps_licenses/licenses_linux_user.txt.md5 b/deps_licenses/licenses_linux_user.txt.md5 index 1d603844f..96264c48f 100644 --- a/deps_licenses/licenses_linux_user.txt.md5 +++ b/deps_licenses/licenses_linux_user.txt.md5 @@ -1 +1 @@ -MD5(poetry.lock)= c9ca01eaefec2ac0031a3f64bd35c149 +MD5(poetry.lock)= 072c41b2b9369e35cb4c3cb173ef4faa diff --git a/deps_licenses/licenses_mac_user.txt.md5 b/deps_licenses/licenses_mac_user.txt.md5 index 1d603844f..96264c48f 100644 --- a/deps_licenses/licenses_mac_user.txt.md5 +++ b/deps_licenses/licenses_mac_user.txt.md5 @@ -1 +1 @@ -MD5(poetry.lock)= c9ca01eaefec2ac0031a3f64bd35c149 +MD5(poetry.lock)= 072c41b2b9369e35cb4c3cb173ef4faa diff --git a/docs/advanced-topics/compilation.md b/docs/advanced-topics/compilation.md index ca24d93d5..bc3a5b716 100644 --- a/docs/advanced-topics/compilation.md +++ b/docs/advanced-topics/compilation.md @@ -1,6 +1,6 @@ # Compilation -Concrete-ML implements machine model inference using Concrete-Numpy as a backend. In order to execute in FHE, a numerical program written in Concrete-Numpy needs to be compiled. This functionality is [described here](https://docs.zama.ai/concrete-numpy/getting-started/compiling_and_executing), and Concrete-ML hides away most of the complexity of this step. The entire compilation process is done by Concrete-Numpy. +Concrete-ML implements machine model inference using Concrete-Numpy as a backend. In order to execute in FHE, a numerical program written in Concrete-Numpy needs to be compiled. This functionality is [described here](https://docs.zama.ai/concrete-numpy/getting-started/quick_start), and Concrete-ML hides away most of the complexity of this step. The entire compilation process is done by Concrete-Numpy. From the perspective of the Concrete-ML user, the compilation process performed by Concrete-Numpy can be broken up into 3 steps: @@ -12,7 +12,7 @@ Additionally, the [client/server API](client_server.md) packages the result of t ## **Concrete-Numpy** op-graphs and the Virtual Library -The first step in the list above takes a python function implemented using the Concrete-Numpy [supported operation set](https://docs.zama.ai/concrete-numpy/getting-started/numpy_support) and transforms it into an executable operation graph. In this step all the floating point subgraphs in the op-graph are fused and converted to Table Lookup operations. +The first step in the list above takes a python function implemented using the Concrete-Numpy [supported operation set](https://docs.zama.ai/concrete-numpy/getting-started/compatibility) and transforms it into an executable operation graph. In this step all the floating point subgraphs in the op-graph are fused and converted to Table Lookup operations. This enables to: diff --git a/docs/advanced-topics/quantization.md b/docs/advanced-topics/quantization.md index 84e742701..58048605e 100644 --- a/docs/advanced-topics/quantization.md +++ b/docs/advanced-topics/quantization.md @@ -135,7 +135,7 @@ def dequantize_output(self, qvalues: numpy.ndarray) -> numpy.ndarray: Intermediary values computed during model inference might need to be re-scaled into the quantized domain of a subsequent model operator. For example, the output of a convolution layer in a neural network might have values that are 8 bits wide, with the next convolutional layer requiring that its inputs are at most 2 bits wide. In the non-encrypted realm, this implies that we need to make use of floating point operations. To make this work with integers as required by FHE, Concrete-ML uses a table lookup (TLU), which is a [way to encode univariate functions in FHE](https://docs.zama.ai/concrete-numpy/tutorials/table_lookup). Table lookups are expensive in FHE, and so should only be used when necessary. -The operations done by the activation function of a previous layer and additional re-scaling to the new quantized domain, which are all floating point operations, [can be fused to a single TLU](https://docs.zama.ai/concrete-numpy/tutorials/working_with_floating_points). Concrete-ML implements quantized operators that perform this fusion, significantly reducing the number of TLUs necessary to perform inference. +The operations done by the activation function of a previous layer and additional re-scaling to the new quantized domain, which are all floating point operations, [can be fused to a single TLU](https://docs.zama.ai/concrete-numpy/tutorials/floating_points). Concrete-ML implements quantized operators that perform this fusion, significantly reducing the number of TLUs necessary to perform inference. There are 3 types of operators: diff --git a/docs/autogenerated/pdoc.pdf b/docs/autogenerated/pdoc.pdf index f6798090814f40184c0c5ba9ebbcb32c41d2f267..79ef4615b23d967a6c363da514fcee195251b8c0 100644 GIT binary patch delta 33039 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 diff --git a/docs/developer-guide/api.md b/docs/developer-guide/api.md index 12bb7ee24..a9c260d84 100644 --- a/docs/developer-guide/api.md +++ b/docs/developer-guide/api.md @@ -1,4 +1,3 @@ # API -Look at [this](https://www.conventionalcommits.org/en/v1.0.0/) -Look at [that](../autogenerated/pdoc.pdf) +The APIs of the project are detailed in a [pdf](../autogenerated/pdoc.pdf). diff --git a/poetry.lock b/poetry.lock index af32e40c8..883116b35 100644 --- a/poetry.lock +++ b/poetry.lock @@ -238,22 +238,14 @@ dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (= [[package]] name = "boto3" -<<<<<<< HEAD -version = "1.24.64" -======= version = "1.24.65" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) description = "The AWS SDK for Python" category = "dev" optional = false python-versions = ">= 3.7" [package.dependencies] -<<<<<<< HEAD -botocore = ">=1.27.64,<1.28.0" -======= botocore = ">=1.27.65,<1.28.0" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -262,11 +254,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -<<<<<<< HEAD -version = "1.27.64" -======= version = "1.27.65" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) description = "Low-level, data-driven core of boto 3." category = "dev" optional = false @@ -431,13 +419,8 @@ PyYAML = "*" [[package]] name = "concrete-numpy" -<<<<<<< HEAD version = "0.7.0" description = "Concrete Numpy is an open-source library which simplifies the use of fully homomorphic encryption (FHE)." -======= -version = "0.6.0" -description = "Concrete Numpy is a python package that contains the tools data scientists need to compile various numpy functions into their Fully Homomorphic Encryption (FHE) equivalents. Concrete Numpy goes on top of the Concrete Library and its Compiler." ->>>>>>> bd5c331 (chore: adding API docs in GitBook) category = "main" optional = false python-versions = ">=3.8,<3.10" @@ -799,11 +782,7 @@ six = "*" [[package]] name = "grpcio" -<<<<<<< HEAD -version = "1.48.0" -======= version = "1.48.1" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) description = "HTTP/2-based RPC framework" category = "dev" optional = false @@ -813,11 +792,7 @@ python-versions = ">=3.6" six = ">=1.5.2" [package.extras] -<<<<<<< HEAD -protobuf = ["grpcio-tools (>=1.48.0)"] -======= protobuf = ["grpcio-tools (>=1.48.1)"] ->>>>>>> bd5c331 (chore: adding API docs in GitBook) [[package]] name = "h5py" @@ -1379,14 +1354,6 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -<<<<<<< HEAD - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] -source = ["Cython (>=0.29.7)"] -======= [package.extras] cssselect = ["cssselect (>=0.7)"] @@ -1409,7 +1376,6 @@ MarkupSafe = ">=0.9.2" babel = ["babel"] lingua = ["lingua"] testing = ["pytest"] ->>>>>>> bd5c331 (chore: adding API docs in GitBook) [[package]] name = "markdown" @@ -2028,8 +1994,6 @@ description = "Utility library for gitignore style pattern matching of file path category = "dev" optional = false python-versions = ">=3.7" -<<<<<<< HEAD -======= [[package]] name = "pdoc3" @@ -2042,7 +2006,6 @@ python-versions = ">= 3.6" [package.dependencies] mako = "*" markdown = ">=3.0" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) [[package]] name = "pexpect" @@ -3657,11 +3620,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = ">=3.8,<3.10" -<<<<<<< HEAD -content-hash = "660c760f8ed666bc1717199d066eafc00c822b04face2fe2bb8b0f3a3865b7e5" -======= -content-hash = "ebf31c47d4aa4bc925a6360fe02adbaf6fd5fa4741d7b5f3e272e21f07dfeaa8" ->>>>>>> bd5c331 (chore: adding API docs in GitBook) +content-hash = "3669c1d7e776605c84b500fee4c520b51e054da96b7d8ba3b0443032ff96d984" [metadata.files] absl-py = [] @@ -4170,10 +4129,7 @@ lockfile = [ {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, ] lxml = [] -<<<<<<< HEAD -======= mako = [] ->>>>>>> bd5c331 (chore: adding API docs in GitBook) markdown = [] markdown-it-py = [ {file = "markdown-it-py-1.1.0.tar.gz", hash = "sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3"}, @@ -4476,10 +4432,7 @@ parso = [ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pathspec = [] -<<<<<<< HEAD -======= pdoc3 = [] ->>>>>>> bd5c331 (chore: adding API docs in GitBook) pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, diff --git a/script/doc_utils/api_doc_pdf.sh b/script/doc_utils/api_doc_pdf.sh index fac5dfdab..0a79db782 100755 --- a/script/doc_utils/api_doc_pdf.sh +++ b/script/doc_utils/api_doc_pdf.sh @@ -12,7 +12,7 @@ do ;; "-h" | "--help") - echo "Usage: " $0 + echo "Usage: $0" exit 0 ;; @@ -21,24 +21,23 @@ do ;; *) echo "Unknown param : $1" - exit -1 + exit 255 ;; esac shift done OUTPUT_DIR_PDF="docs/autogenerated/" -PDOC=pdoc3 # Generate in pdf rm -rf $OUTPUT_DIR_PDF mkdir -p $OUTPUT_DIR_PDF -$PDOC --pdf src.concrete.ml > tmp.pdoc.output.txt 2>/dev/null +poetry run pdoc3 --pdf src.concrete.ml > tmp.pdoc.output.txt 2>/dev/null # Problems of version -PANDOC_VERSION_IS_NOT_2=`pandoc --version | grep "pandoc 2." > /dev/null; echo $?` +PANDOC_VERSION_IS_NOT_2=$(pandoc --version | grep "pandoc 2." > /dev/null; echo $?) -if [ $PANDOC_VERSION_IS_NOT_2 -eq 0 ] +if [ "$PANDOC_VERSION_IS_NOT_2" -eq 0 ] then ENGINE="--pdf-engine" else diff --git a/script/make_utils/setup_os_deps.sh b/script/make_utils/setup_os_deps.sh index 05ad60ef9..f39d3e22c 100755 --- a/script/make_utils/setup_os_deps.sh +++ b/script/make_utils/setup_os_deps.sh @@ -135,6 +135,7 @@ if [[ "${OS_NAME}" == "Linux" ]]; then pandoc \ openssl \ shellcheck \ + texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-xetex lmodern \ wget && \ ${CLEAR_APT_LISTS:+$CLEAR_APT_LISTS} \ pip install --no-cache-dir --upgrade pip && \