syft


Namesyft JSON
Version 0.8.6 PyPI version JSON
download
home_pagehttps://openmined.github.io/PySyft/
SummaryPerform numpy-like analysis on data that remains in someone elses server
upload_time2024-04-03 12:17:10
maintainerNone
docs_urlNone
authorOpenMined
requires_python>=3.10
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="left"> <a href="https://pypi.org/project/syft/"><img src="https://static.pepy.tech/badge/pysyft" /></a> <a href="https://pypi.org/project/syft/"><img src="https://badge.fury.io/py/syft.svg" /></a> <a href="https://hub.docker.com/u/openmined"><img src="https://img.shields.io/badge/docker-images-blue?logo=docker" /></a> <a href="https://github.com/OpenMined/PySyft/actions/workflows/nightlies.yml"><img src="https://github.com/OpenMined/PySyft/actions/workflows/nightlies.yml/badge.svg?branch=dev" /></a> <a href="https://slack.openmined.org/"><img src="https://img.shields.io/badge/chat-on%20slack-purple?logo=slack" /></a> <a href="https://openmined.github.io/PySyft/"><img src="https://img.shields.io/badge/read-docs-yellow?logo=mdbook" /></a>
<br /><br /></div>

<img alt="Syft Logo" src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/title_syft_light.png" width="200px" />

Perform data science on `data` that remains in `someone else's` server

# Quickstart

✅ `Linux` ✅ `macOS` ✅ `Windows` ✅ `Docker` ✅ `Podman` ✅ `Kubernetes`

## Install Client

```bash
$ pip install -U syft[data_science]
```

## Launch Server

```python
# from Jupyter / Python
import syft as sy
sy.requires(">=0.8.6,<0.8.7")
node = sy.orchestra.launch(name="my-domain", port=8080, dev_mode=True, reset=True)
```

```bash
# or from the command line
$ syft launch --name=my-domain --port=8080 --reset=True

Starting syft-node server on 0.0.0.0:8080
```

## Launch Client

```python
import syft as sy
sy.requires(">=0.8.6,<0.8.7")
domain_client = sy.login(port=8080, email="info@openmined.org", password="changethis")
```

## PySyft in 10 minutes

📝 <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api">API Example Notebooks</a>

- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/00-load-data.ipynb">00-load-data.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/01-submit-code.ipynb">01-submit-code.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/02-review-code-and-approve.ipynb">02-review-code-and-approve.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/03-data-scientist-download-result.ipynb">03-data-scientist-download-result.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/04-jax-example.ipynb">04-jax-example.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/05-custom-policy.ipynb">05-custom-policy.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/06-multiple-code-requests.ipynb">06-multiple-code-requests.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/07-domain-register-control-flow.ipynb">07-domain-register-control-flow.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/08-code-version.ipynb">08-code-version.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/09-blob-storage.ipynb">09-blob-storage.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/10-container-images.ipynb">10-container-images.ipynb</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/11-container-images-k8s.ipynb">11-container-images-k8s.ipynb</a>

## Deploy Kubernetes Helm Chart

**Note**: Assuming we have a Kubernetes cluster already setup.

#### 1. Add and update Helm repo for Syft

```sh
helm repo add openmined https://openmined.github.io/PySyft/helm
helm repo update openmined
```

#### 2. Search for available Syft versions

```sh
helm search repo openmined/syft --versions --devel
```

#### 3. Set your preferred Syft Chart version

```sh
SYFT_VERSION="<paste the chart version number>"
```

#### 4. Provisioning Helm Charts

```sh
helm install my-domain openmined/syft --version $SYFT_VERSION --namespace syft --create-namespace --set ingress.className="traefik"
```

### Ingress Controllers

For Azure AKS

```sh
helm install ... --set ingress.className="azure-application-gateway"
```

For AWS EKS

```sh
helm install ... --set ingress.className="alb"
```

For Google GKE we need the [`gce` annotation](https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress#create-ingress) annotation.

```sh
helm install ... --set ingress.class="gce"
```

## Deploy to a Container Engine or Cloud

1. Install our handy 🛵 cli tool which makes deploying a Domain or Gateway server to Docker or VM a one-liner:  
   `pip install -U hagrid`

2. Then run our interactive jupyter Install 🧙🏽‍♂️ Wizard<sup>BETA</sup>:  
   `hagrid quickstart`

3. In the tutorial you will learn how to install and deploy:  
   `PySyft` = our `numpy`-like 🐍 Python library for computing on `private data` in someone else's `Domain`

   `PyGrid` = our 🐳 `docker` / 🐧 `vm` `Domain` & `Gateway` Servers where `private data` lives

## Docs and Support

- 📚 <a href="https://openmined.github.io/PySyft/">Docs</a>
- `#support` on <a href="https://slack.openmined.org/">Slack</a>

# Install Notes

- HAGrid 0.3 Requires: 🐍 `python` 🐙 `git` - Run: `pip install -U hagrid`
- Interactive Install 🧙🏽‍♂️ Wizard<sup>BETA</sup> Requires 🛵 `hagrid`: - Run: `hagrid quickstart`
- PySyft 0.8.1 Requires: 🐍 `python 3.10 - 3.12` - Run: `pip install -U syft`
- PyGrid Requires: 🐳 `docker`, 🦦 `podman` or ☸️ `kubernetes` - Run: `hagrid launch ...`

# Versions

`0.9.0` - Coming soon...  
`0.8.7` (Beta) - `dev` branch 👈🏽 <a href="https://github.com/OpenMined/PySyft/tree/dev/notebooks/api/0.8">API</a> - Coming soon...  
`0.8.6` (Stable) - <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8">API</a>

Deprecated:

- `0.8.5-post.2` - <a href="https://github.com/OpenMined/PySyft/tree/0.8.5-post.2/notebooks/api/0.8">API</a>
- `0.8.4` - <a href="https://github.com/OpenMined/PySyft/tree/0.8.4/notebooks/api/0.8">API</a>
- `0.8.3` - <a href="https://github.com/OpenMined/PySyft/tree/0.8.3/notebooks/api/0.8">API</a>
- `0.8.2` - <a href="https://github.com/OpenMined/PySyft/tree/0.8.2/notebooks/api/0.8">API</a>
- `0.8.1` - <a href="https://github.com/OpenMined/PySyft/tree/0.8.1/notebooks/api/0.8">API</a>
- `0.8.0` - <a href="https://github.com/OpenMined/PySyft/tree/0.8/notebooks/api/0.8">API</a>
- `0.7.0` - <a href="https://github.com/OpenMined/courses/tree/introduction-to-remote-data-science-dev">Course 3 Updated</a>
- `0.6.0` - <a href="https://github.com/OpenMined/courses/tree/introduction-to-remote-data-science">Course 3</a>
- `0.5.1` - <a href="https://github.com/OpenMined/courses/tree/foundations-of-private-computation">Course 2</a> + M1 Hotfix
- `0.2.0` - `0.5.0`

PySyft and PyGrid use the same `version` and its best to match them up where possible. We release weekly betas which can be used in each context:

PySyft (Stable): `pip install -U syft`  
PyGrid (Stable) `hagrid launch ... tag=latest`

PySyft (Beta): `pip install -U syft --pre`  
PyGrid (Beta): `hagrid launch ... tag=beta`

HAGrid is a cli / deployment tool so the latest version of `hagrid` is usually the best.

# What is Syft?

<img align="right" src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_big.png" alt="Syft" height="250" style="padding-left:30px;">

`Syft` is OpenMined's `open source` stack that provides `secure` and `private` Data Science in Python. Syft decouples `private data` from model training, using techniques like [Federated Learning](https://ai.googleblog.com/2017/04/federated-learning-collaborative.html), [Differential Privacy](https://en.wikipedia.org/wiki/Differential_privacy), and [Encrypted Computation](https://en.wikipedia.org/wiki/Homomorphic_encryption). This is done with a `numpy`-like interface and integration with `Deep Learning` frameworks, so that you as a `Data Scientist` can maintain your current workflow while using these new `privacy-enhancing techniques`.

### Why should I use Syft?

`Syft` allows a `Data Scientist` to ask `questions` about a `dataset` and, within `privacy limits` set by the `data owner`, get `answers` to those `questions`, all without obtaining a `copy` of the data itself. We call this process `Remote Data Science`. It means in a wide variety of `domains` across society, the current `risks` of sharing information (`copying` data) with someone such as, privacy invasion, IP theft and blackmail will no longer prevent the vast `benefits` such as innovation, insights and scientific discovery which secure access will provide.

No more cold calls to get `access` to a dataset. No more weeks of `wait times` to get a `result` on your `query`. It also means `1000x more data` in every domain. PySyft opens the doors to a streamlined Data Scientist `workflow`, all with the individual's `privacy` at its heart.

<!--
# Tutorials

<table border="5" bordercolor="grey">
<tr>
<th align="center">
<img width="441" height="1">
<div align="center">
<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/dataowner.png" alt="" width="100" height="100" align="center">
<p>Data Owner</p></div>
</th>
<th align="center">
<img width="441" height="1">
<div align="center"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/datascientist.png" alt="" width="100" height="100" align="center">
<p>Data Scientist</p></div>

</th>
<th align="center">
<img width="441" height="1">
<div align="center">
<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/dataengineer.png" alt="" width="100" height="100" align="center">
<p>Data Engineer</p>
</div>
</th>
</tr>
<tr>
<td valign="top">

- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/00-deploy-domain.ipynb">Deploy a Domain Server</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/01-upload-data.ipynb">Upload Private Data</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/02-create-account-configure-pb.ipynb">Create Accounts</a>
- Manage Privacy Budget</a>
- <a href="https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/03-join-network.ipynb">Join a Network</a>
- Learn how PETs streamline Data Policies

</td>
<td valign="top">

- Install Syft</a>
- Connect to a Domain</a>
- Search for Datasets</a>
- Train Models
- Retrieve Secure Results
- Learn Differential Privacy

</td>
<td valign="top">

- Setup Dev Mode</a>
- Deploy to Azure
- Deploy to GCP
- Deploy to Kubernetes
- Customize Networking
- Modify PyGrid UI
</td>
</tr>
</table>
-->

# Terminology

<table border="5" bordercolor="grey">
<tr>
<th align="center">
<img width="441" height="1">
<p>👨🏻‍💼 Data Owners</p>
</th>
<th align="center">
<img width="441" height="1">
<p>👩🏽‍🔬 Data Scientists</p>
</th>
</tr>
<tr>
<td valign="top">
<!-- REMOVE THE BACKSLASHES -->

Provide `datasets` which they would like to make available for `study` by an `outside party` they may or may not `fully trust` has good intentions.

</td>
<td valign="top">
<!-- REMOVE THE BACKSLASHES -->

Are end `users` who desire to perform `computations` or `answer` a specific `question` using one or more data owners' `datasets`.

</td>
</tr>
<tr>
<th align="center">
<img width="441" height="1">
<p>🏰 Domain Server</p>
</th>
<th align="center">
<img width="441" height="1">
<p>🔗 Gateway Server</p>
</th>
</tr>
<tr>
<td valign="top">
<!-- REMOVE THE BACKSLASHES -->

Manages the `remote study` of the data by a `Data Scientist` and allows the `Data Owner` to manage the `data` and control the `privacy guarantees` of the subjects under study. It also acts as a `gatekeeper` for the `Data Scientist's` access to the data to compute and experiment with the results.

</td>
<td valign="top">
<!-- REMOVE THE BACKSLASHES -->

Provides services to a group of `Data Owners` and `Data Scientists`, such as dataset `search` and bulk `project approval` (legal / technical) to participate in a project. A gateway server acts as a bridge between it's members (`Domains`) and their subscribers (`Data Scientists`) and can provide access to a collection of `domains` at once.</td>

</tr>
<tr>
</table>

# Community

<table border="5" bordercolor="grey">
<tr>
<th align="center" valign="top">
<img width="441" height="1">
<div align="center">

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_slack_title_light.png" alt="" width="100%" align="center" />

<a href="https://slack.openmined.org/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_slack.png" alt="" width="100%" align="center" /></a>

</div>
</th>
<th align="center" valign="top">
<img width="441" height="1">
<div align="center">

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_title_videos_papers_light.png" alt="" width="100%" align="center" />

<p align="left"><sub><sup>
🎥 <a href="https://www.youtube.com/watch?v=qVf0tPBzr2k">PETs: Remote Data Science Unleashed - R gov 2021</a><br />
🎥 <a href="https://youtu.be/sCoDWKTbh3s?list=PL_lsbAsL_o2BQKXG7mkGFA8LSApCnhljL">Introduction to Remote Data Science - PyTorch 2021</a><br />
🎥 <a href="https://youtu.be/kzLeTz_vIeQ?list=PL_lsbAsL_o2BtOz6KUfUI_Zla6Rg5dmyc">The Future of AI Tools - PyTorch 2020</a><br />
🎥 <a href="https://www.youtube.com/watch?v=4zrU54VIK6k&t=1s">Privacy Preserving AI - MIT Deep Learning Series</a><br />
🎥 <a href="https://www.youtube.com/watch?v=Pr4erdusiW0">Privacy-Preserving Data Science - TWiML Talk #241</a><br />
🎥 <a href="https://www.youtube.com/watch?v=NJBBE_SN90A">Privacy Preserving AI - PyTorch Devcon 2019</a><br />
📖 <a href="https://arxiv.org/pdf/2110.01315.pdf">Towards general-purpose infrastructure for protect...</a><br />
📖 <a href="https://arxiv.org/pdf/2104.12385.pdf">Syft 0.5: A platform for universally deployable ...</a><br />
📖 <a href="https://arxiv.org/pdf/1811.04017.pdf">A generic framework for privacy preserving deep ...</a>
</sup></sup></p>
</div>
</th>
<th align="center" valign="top">
<img width="441" height="1">
<div align="center">

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_padawan_title_light.png" alt="" width="100%" align="center" />

<a href="https://blog.openmined.org/work-on-ais-most-exciting-frontier-no-phd-required/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_padawan.png" alt="" width="100%" align="center"></a>

</div>
</th>
</tr>
</table>

# Courses

<table border="5" bordercolor="grey">
<tr>
<th align="center">
<img width="441" height="1">
<div align="center">
<a href="https://courses.openmined.org/courses/our-privacy-opportunity"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_privacy.png" alt="" width="100%" align="center" /></a>
</th>
<th align="center">
<img width="441" height="1">
<div align="center">
<a href="https://courses.openmined.org/courses/foundations-of-private-computation"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_foundations.png" alt="" width="100%" align="center" /></a>
</div>
</th>
<th align="center">
<img width="441" height="1">
<div align="center">
<a href="https://courses.openmined.org/courses/introduction-to-remote-data-science"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_introduction.png" alt="" width="100%" align="center"></a>
</div>
</th>
</tr>
</table>

# Contributors

OpenMined and Syft appreciates all contributors, if you would like to fix a bug or suggest a new feature, please see our [guidelines](https://openmined.github.io/PySyft/developer_guide/index.html).<br />

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/contributors_light.jpg" alt="Contributors" width="100%" />

# Supporters

<table border="0">
<tr>
<th align="center">
<a href="https://sloan.org/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_sloan.png" /></a>
</th>
<th align="center">
<a href="https://opensource.fb.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_meta.png" /></a>
</th>
<th align="center">
<a href="https://pytorch.org/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_torch.png" /></a>
</th>
<th align="center">
<a href="https://www.dpmc.govt.nz/">
<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_nz_light.png" />
</a>
</th>
<th align="center">
<a href="https://twitter.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_twitter.png" /></a>
</th>
<th align="center">
<a href="https://google.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_google.png" /></a>
</th>
<th align="center">
<a href="https://microsoft.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_microsoft.png" /></a>
</th>
<th align="center">
<a href="https://omidyar.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_on.png" /></a>
</th>
<th align="center">
<a href="https://www.udacity.com/"><img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_udacity.png" /></a>
</th>
<th align="center">
<a href="https://www.centerfordigitalhealthinnovation.org/">

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_cdhi_light.png" />

</a>
</th>
<th align="center">
<a href="https://arkhn.org/">
<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_arkhn_light.png" />
</a>
</th>
</tr>
</table>

# Open Collective

`OpenMined` is a fiscally sponsored `501(c)(3)` in the USA. We are funded by our generous supporters on <a href="https://opencollective.com/openmined">Open Collective</a>. <br /><br />

<img src="https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/opencollective_light.png" alt="Contributors" width="100%" />

# Disclaimer

Syft is under active development and is not yet ready for pilots on private data without our assistance. As early access participants, please contact us via [Slack](https://slack.openmined.org/) or email if you would like to ask a question or have a use case that you would like to discuss.

# License

[Apache License 2.0](LICENSE)<br />
<a href="https://www.flaticon.com/free-icons/person" title="person icons">Person icons created by Freepik - Flaticon</a>

<!-- 🥇 -->

            

Raw data

            {
    "_id": null,
    "home_page": "https://openmined.github.io/PySyft/",
    "name": "syft",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "OpenMined",
    "author_email": "info@openmined.org",
    "download_url": "https://files.pythonhosted.org/packages/dd/ca/1e58fe908b743c2fe967a3ac2f48b0f504fd8d3f500201e7852cd6aecc28/syft-0.8.6.tar.gz",
    "platform": "any",
    "description": "<div align=\"left\"> <a href=\"https://pypi.org/project/syft/\"><img src=\"https://static.pepy.tech/badge/pysyft\" /></a> <a href=\"https://pypi.org/project/syft/\"><img src=\"https://badge.fury.io/py/syft.svg\" /></a> <a href=\"https://hub.docker.com/u/openmined\"><img src=\"https://img.shields.io/badge/docker-images-blue?logo=docker\" /></a> <a href=\"https://github.com/OpenMined/PySyft/actions/workflows/nightlies.yml\"><img src=\"https://github.com/OpenMined/PySyft/actions/workflows/nightlies.yml/badge.svg?branch=dev\" /></a> <a href=\"https://slack.openmined.org/\"><img src=\"https://img.shields.io/badge/chat-on%20slack-purple?logo=slack\" /></a> <a href=\"https://openmined.github.io/PySyft/\"><img src=\"https://img.shields.io/badge/read-docs-yellow?logo=mdbook\" /></a>\n<br /><br /></div>\n\n<img alt=\"Syft Logo\" src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/title_syft_light.png\" width=\"200px\" />\n\nPerform data science on `data` that remains in `someone else's` server\n\n# Quickstart\n\n\u2705 `Linux` \u2705 `macOS` \u2705 `Windows` \u2705 `Docker` \u2705 `Podman` \u2705 `Kubernetes`\n\n## Install Client\n\n```bash\n$ pip install -U syft[data_science]\n```\n\n## Launch Server\n\n```python\n# from Jupyter / Python\nimport syft as sy\nsy.requires(\">=0.8.6,<0.8.7\")\nnode = sy.orchestra.launch(name=\"my-domain\", port=8080, dev_mode=True, reset=True)\n```\n\n```bash\n# or from the command line\n$ syft launch --name=my-domain --port=8080 --reset=True\n\nStarting syft-node server on 0.0.0.0:8080\n```\n\n## Launch Client\n\n```python\nimport syft as sy\nsy.requires(\">=0.8.6,<0.8.7\")\ndomain_client = sy.login(port=8080, email=\"info@openmined.org\", password=\"changethis\")\n```\n\n## PySyft in 10 minutes\n\n\ud83d\udcdd <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api\">API Example Notebooks</a>\n\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/00-load-data.ipynb\">00-load-data.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/01-submit-code.ipynb\">01-submit-code.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/02-review-code-and-approve.ipynb\">02-review-code-and-approve.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/03-data-scientist-download-result.ipynb\">03-data-scientist-download-result.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/04-jax-example.ipynb\">04-jax-example.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/05-custom-policy.ipynb\">05-custom-policy.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/06-multiple-code-requests.ipynb\">06-multiple-code-requests.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/07-domain-register-control-flow.ipynb\">07-domain-register-control-flow.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/08-code-version.ipynb\">08-code-version.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/09-blob-storage.ipynb\">09-blob-storage.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/10-container-images.ipynb\">10-container-images.ipynb</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8/11-container-images-k8s.ipynb\">11-container-images-k8s.ipynb</a>\n\n## Deploy Kubernetes Helm Chart\n\n**Note**: Assuming we have a Kubernetes cluster already setup.\n\n#### 1. Add and update Helm repo for Syft\n\n```sh\nhelm repo add openmined https://openmined.github.io/PySyft/helm\nhelm repo update openmined\n```\n\n#### 2. Search for available Syft versions\n\n```sh\nhelm search repo openmined/syft --versions --devel\n```\n\n#### 3. Set your preferred Syft Chart version\n\n```sh\nSYFT_VERSION=\"<paste the chart version number>\"\n```\n\n#### 4. Provisioning Helm Charts\n\n```sh\nhelm install my-domain openmined/syft --version $SYFT_VERSION --namespace syft --create-namespace --set ingress.className=\"traefik\"\n```\n\n### Ingress Controllers\n\nFor Azure AKS\n\n```sh\nhelm install ... --set ingress.className=\"azure-application-gateway\"\n```\n\nFor AWS EKS\n\n```sh\nhelm install ... --set ingress.className=\"alb\"\n```\n\nFor Google GKE we need the [`gce` annotation](https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress#create-ingress) annotation.\n\n```sh\nhelm install ... --set ingress.class=\"gce\"\n```\n\n## Deploy to a Container Engine or Cloud\n\n1. Install our handy \ud83d\udef5 cli tool which makes deploying a Domain or Gateway server to Docker or VM a one-liner:  \n   `pip install -U hagrid`\n\n2. Then run our interactive jupyter Install \ud83e\uddd9\ud83c\udffd\u200d\u2642\ufe0f Wizard<sup>BETA</sup>:  \n   `hagrid quickstart`\n\n3. In the tutorial you will learn how to install and deploy:  \n   `PySyft` = our `numpy`-like \ud83d\udc0d Python library for computing on `private data` in someone else's `Domain`\n\n   `PyGrid` = our \ud83d\udc33 `docker` / \ud83d\udc27 `vm` `Domain` & `Gateway` Servers where `private data` lives\n\n## Docs and Support\n\n- \ud83d\udcda <a href=\"https://openmined.github.io/PySyft/\">Docs</a>\n- `#support` on <a href=\"https://slack.openmined.org/\">Slack</a>\n\n# Install Notes\n\n- HAGrid 0.3 Requires: \ud83d\udc0d `python` \ud83d\udc19 `git` - Run: `pip install -U hagrid`\n- Interactive Install \ud83e\uddd9\ud83c\udffd\u200d\u2642\ufe0f Wizard<sup>BETA</sup> Requires \ud83d\udef5 `hagrid`: - Run: `hagrid quickstart`\n- PySyft 0.8.1 Requires: \ud83d\udc0d `python 3.10 - 3.12` - Run: `pip install -U syft`\n- PyGrid Requires: \ud83d\udc33 `docker`, \ud83e\udda6 `podman` or \u2638\ufe0f `kubernetes` - Run: `hagrid launch ...`\n\n# Versions\n\n`0.9.0` - Coming soon...  \n`0.8.7` (Beta) - `dev` branch \ud83d\udc48\ud83c\udffd <a href=\"https://github.com/OpenMined/PySyft/tree/dev/notebooks/api/0.8\">API</a> - Coming soon...  \n`0.8.6` (Stable) - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/api/0.8\">API</a>\n\nDeprecated:\n\n- `0.8.5-post.2` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.5-post.2/notebooks/api/0.8\">API</a>\n- `0.8.4` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.4/notebooks/api/0.8\">API</a>\n- `0.8.3` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.3/notebooks/api/0.8\">API</a>\n- `0.8.2` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.2/notebooks/api/0.8\">API</a>\n- `0.8.1` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.1/notebooks/api/0.8\">API</a>\n- `0.8.0` - <a href=\"https://github.com/OpenMined/PySyft/tree/0.8/notebooks/api/0.8\">API</a>\n- `0.7.0` - <a href=\"https://github.com/OpenMined/courses/tree/introduction-to-remote-data-science-dev\">Course 3 Updated</a>\n- `0.6.0` - <a href=\"https://github.com/OpenMined/courses/tree/introduction-to-remote-data-science\">Course 3</a>\n- `0.5.1` - <a href=\"https://github.com/OpenMined/courses/tree/foundations-of-private-computation\">Course 2</a> + M1 Hotfix\n- `0.2.0` - `0.5.0`\n\nPySyft and PyGrid use the same `version` and its best to match them up where possible. We release weekly betas which can be used in each context:\n\nPySyft (Stable): `pip install -U syft`  \nPyGrid (Stable) `hagrid launch ... tag=latest`\n\nPySyft (Beta): `pip install -U syft --pre`  \nPyGrid (Beta): `hagrid launch ... tag=beta`\n\nHAGrid is a cli / deployment tool so the latest version of `hagrid` is usually the best.\n\n# What is Syft?\n\n<img align=\"right\" src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_big.png\" alt=\"Syft\" height=\"250\" style=\"padding-left:30px;\">\n\n`Syft` is OpenMined's `open source` stack that provides `secure` and `private` Data Science in Python. Syft decouples `private data` from model training, using techniques like [Federated Learning](https://ai.googleblog.com/2017/04/federated-learning-collaborative.html), [Differential Privacy](https://en.wikipedia.org/wiki/Differential_privacy), and [Encrypted Computation](https://en.wikipedia.org/wiki/Homomorphic_encryption). This is done with a `numpy`-like interface and integration with `Deep Learning` frameworks, so that you as a `Data Scientist` can maintain your current workflow while using these new `privacy-enhancing techniques`.\n\n### Why should I use Syft?\n\n`Syft` allows a `Data Scientist` to ask `questions` about a `dataset` and, within `privacy limits` set by the `data owner`, get `answers` to those `questions`, all without obtaining a `copy` of the data itself. We call this process `Remote Data Science`. It means in a wide variety of `domains` across society, the current `risks` of sharing information (`copying` data) with someone such as, privacy invasion, IP theft and blackmail will no longer prevent the vast `benefits` such as innovation, insights and scientific discovery which secure access will provide.\n\nNo more cold calls to get `access` to a dataset. No more weeks of `wait times` to get a `result` on your `query`. It also means `1000x more data` in every domain. PySyft opens the doors to a streamlined Data Scientist `workflow`, all with the individual's `privacy` at its heart.\n\n<!--\n# Tutorials\n\n<table border=\"5\" bordercolor=\"grey\">\n<tr>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/dataowner.png\" alt=\"\" width=\"100\" height=\"100\" align=\"center\">\n<p>Data Owner</p></div>\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/datascientist.png\" alt=\"\" width=\"100\" height=\"100\" align=\"center\">\n<p>Data Scientist</p></div>\n\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/personas_image/dataengineer.png\" alt=\"\" width=\"100\" height=\"100\" align=\"center\">\n<p>Data Engineer</p>\n</div>\n</th>\n</tr>\n<tr>\n<td valign=\"top\">\n\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/00-deploy-domain.ipynb\">Deploy a Domain Server</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/01-upload-data.ipynb\">Upload Private Data</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/02-create-account-configure-pb.ipynb\">Create Accounts</a>\n- Manage Privacy Budget</a>\n- <a href=\"https://github.com/OpenMined/PySyft/tree/0.8.6/notebooks/quickstart/data-owner/03-join-network.ipynb\">Join a Network</a>\n- Learn how PETs streamline Data Policies\n\n</td>\n<td valign=\"top\">\n\n- Install Syft</a>\n- Connect to a Domain</a>\n- Search for Datasets</a>\n- Train Models\n- Retrieve Secure Results\n- Learn Differential Privacy\n\n</td>\n<td valign=\"top\">\n\n- Setup Dev Mode</a>\n- Deploy to Azure\n- Deploy to GCP\n- Deploy to Kubernetes\n- Customize Networking\n- Modify PyGrid UI\n</td>\n</tr>\n</table>\n-->\n\n# Terminology\n\n<table border=\"5\" bordercolor=\"grey\">\n<tr>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<p>\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbc Data Owners</p>\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<p>\ud83d\udc69\ud83c\udffd\u200d\ud83d\udd2c Data Scientists</p>\n</th>\n</tr>\n<tr>\n<td valign=\"top\">\n<!-- REMOVE THE BACKSLASHES -->\n\nProvide `datasets` which they would like to make available for `study` by an `outside party` they may or may not `fully trust` has good intentions.\n\n</td>\n<td valign=\"top\">\n<!-- REMOVE THE BACKSLASHES -->\n\nAre end `users` who desire to perform `computations` or `answer` a specific `question` using one or more data owners' `datasets`.\n\n</td>\n</tr>\n<tr>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<p>\ud83c\udff0 Domain Server</p>\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<p>\ud83d\udd17 Gateway Server</p>\n</th>\n</tr>\n<tr>\n<td valign=\"top\">\n<!-- REMOVE THE BACKSLASHES -->\n\nManages the `remote study` of the data by a `Data Scientist` and allows the `Data Owner` to manage the `data` and control the `privacy guarantees` of the subjects under study. It also acts as a `gatekeeper` for the `Data Scientist's` access to the data to compute and experiment with the results.\n\n</td>\n<td valign=\"top\">\n<!-- REMOVE THE BACKSLASHES -->\n\nProvides services to a group of `Data Owners` and `Data Scientists`, such as dataset `search` and bulk `project approval` (legal / technical) to participate in a project. A gateway server acts as a bridge between it's members (`Domains`) and their subscribers (`Data Scientists`) and can provide access to a collection of `domains` at once.</td>\n\n</tr>\n<tr>\n</table>\n\n# Community\n\n<table border=\"5\" bordercolor=\"grey\">\n<tr>\n<th align=\"center\" valign=\"top\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_slack_title_light.png\" alt=\"\" width=\"100%\" align=\"center\" />\n\n<a href=\"https://slack.openmined.org/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_slack.png\" alt=\"\" width=\"100%\" align=\"center\" /></a>\n\n</div>\n</th>\n<th align=\"center\" valign=\"top\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_title_videos_papers_light.png\" alt=\"\" width=\"100%\" align=\"center\" />\n\n<p align=\"left\"><sub><sup>\n\ud83c\udfa5 <a href=\"https://www.youtube.com/watch?v=qVf0tPBzr2k\">PETs: Remote Data Science Unleashed - R gov 2021</a><br />\n\ud83c\udfa5 <a href=\"https://youtu.be/sCoDWKTbh3s?list=PL_lsbAsL_o2BQKXG7mkGFA8LSApCnhljL\">Introduction to Remote Data Science - PyTorch 2021</a><br />\n\ud83c\udfa5 <a href=\"https://youtu.be/kzLeTz_vIeQ?list=PL_lsbAsL_o2BtOz6KUfUI_Zla6Rg5dmyc\">The Future of AI Tools - PyTorch 2020</a><br />\n\ud83c\udfa5 <a href=\"https://www.youtube.com/watch?v=4zrU54VIK6k&t=1s\">Privacy Preserving AI - MIT Deep Learning Series</a><br />\n\ud83c\udfa5 <a href=\"https://www.youtube.com/watch?v=Pr4erdusiW0\">Privacy-Preserving Data Science - TWiML Talk #241</a><br />\n\ud83c\udfa5 <a href=\"https://www.youtube.com/watch?v=NJBBE_SN90A\">Privacy Preserving AI - PyTorch Devcon 2019</a><br />\n\ud83d\udcd6 <a href=\"https://arxiv.org/pdf/2110.01315.pdf\">Towards general-purpose infrastructure for protect...</a><br />\n\ud83d\udcd6 <a href=\"https://arxiv.org/pdf/2104.12385.pdf\">Syft 0.5: A platform for universally deployable ...</a><br />\n\ud83d\udcd6 <a href=\"https://arxiv.org/pdf/1811.04017.pdf\">A generic framework for privacy preserving deep ...</a>\n</sup></sup></p>\n</div>\n</th>\n<th align=\"center\" valign=\"top\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_padawan_title_light.png\" alt=\"\" width=\"100%\" align=\"center\" />\n\n<a href=\"https://blog.openmined.org/work-on-ais-most-exciting-frontier-no-phd-required/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/panel_padawan.png\" alt=\"\" width=\"100%\" align=\"center\"></a>\n\n</div>\n</th>\n</tr>\n</table>\n\n# Courses\n\n<table border=\"5\" bordercolor=\"grey\">\n<tr>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n<a href=\"https://courses.openmined.org/courses/our-privacy-opportunity\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_privacy.png\" alt=\"\" width=\"100%\" align=\"center\" /></a>\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n<a href=\"https://courses.openmined.org/courses/foundations-of-private-computation\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_foundations.png\" alt=\"\" width=\"100%\" align=\"center\" /></a>\n</div>\n</th>\n<th align=\"center\">\n<img width=\"441\" height=\"1\">\n<div align=\"center\">\n<a href=\"https://courses.openmined.org/courses/introduction-to-remote-data-science\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/course_introduction.png\" alt=\"\" width=\"100%\" align=\"center\"></a>\n</div>\n</th>\n</tr>\n</table>\n\n# Contributors\n\nOpenMined and Syft appreciates all contributors, if you would like to fix a bug or suggest a new feature, please see our [guidelines](https://openmined.github.io/PySyft/developer_guide/index.html).<br />\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/contributors_light.jpg\" alt=\"Contributors\" width=\"100%\" />\n\n# Supporters\n\n<table border=\"0\">\n<tr>\n<th align=\"center\">\n<a href=\"https://sloan.org/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_sloan.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://opensource.fb.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_meta.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://pytorch.org/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_torch.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://www.dpmc.govt.nz/\">\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_nz_light.png\" />\n</a>\n</th>\n<th align=\"center\">\n<a href=\"https://twitter.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_twitter.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://google.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_google.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://microsoft.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_microsoft.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://omidyar.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_on.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://www.udacity.com/\"><img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_udacity.png\" /></a>\n</th>\n<th align=\"center\">\n<a href=\"https://www.centerfordigitalhealthinnovation.org/\">\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_cdhi_light.png\" />\n\n</a>\n</th>\n<th align=\"center\">\n<a href=\"https://arkhn.org/\">\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/logo_arkhn_light.png\" />\n</a>\n</th>\n</tr>\n</table>\n\n# Open Collective\n\n`OpenMined` is a fiscally sponsored `501(c)(3)` in the USA. We are funded by our generous supporters on <a href=\"https://opencollective.com/openmined\">Open Collective</a>. <br /><br />\n\n<img src=\"https://raw.githubusercontent.com/OpenMined/PySyft/0.8.6/docs/img/opencollective_light.png\" alt=\"Contributors\" width=\"100%\" />\n\n# Disclaimer\n\nSyft is under active development and is not yet ready for pilots on private data without our assistance. As early access participants, please contact us via [Slack](https://slack.openmined.org/) or email if you would like to ask a question or have a use case that you would like to discuss.\n\n# License\n\n[Apache License 2.0](LICENSE)<br />\n<a href=\"https://www.flaticon.com/free-icons/person\" title=\"person icons\">Person icons created by Freepik - Flaticon</a>\n\n<!-- \ud83e\udd47 -->\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Perform numpy-like analysis on data that remains in someone elses server",
    "version": "0.8.6",
    "project_urls": {
        "Homepage": "https://openmined.github.io/PySyft/",
        "Source": "https://github.com/OpenMined/PySyft",
        "Tracker": "https://github.com/OpenMined/PySyft/issues"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a2f61f92f2d541fd1af2d6723ab4d055b5acb39b4801cda6872d287f19f9da7b",
                "md5": "678e511e16189a9d1c22cea8b1c6b634",
                "sha256": "74910dd404d904bbf5d311399f62943f607c427e7cd3eb5dd27d76f9e9cdd360"
            },
            "downloads": -1,
            "filename": "syft-0.8.6-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "678e511e16189a9d1c22cea8b1c6b634",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.10",
            "size": 549761,
            "upload_time": "2024-04-03T12:17:05",
            "upload_time_iso_8601": "2024-04-03T12:17:05.139462Z",
            "url": "https://files.pythonhosted.org/packages/a2/f6/1f92f2d541fd1af2d6723ab4d055b5acb39b4801cda6872d287f19f9da7b/syft-0.8.6-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ddca1e58fe908b743c2fe967a3ac2f48b0f504fd8d3f500201e7852cd6aecc28",
                "md5": "5cc97eb72d65a29b3512532a8dd6ccc8",
                "sha256": "9b69cafa2f1ab35d1c0c9decc14a1b91fa33a5785b18731fa41bd9b90dc27b1b"
            },
            "downloads": -1,
            "filename": "syft-0.8.6.tar.gz",
            "has_sig": false,
            "md5_digest": "5cc97eb72d65a29b3512532a8dd6ccc8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 461975,
            "upload_time": "2024-04-03T12:17:10",
            "upload_time_iso_8601": "2024-04-03T12:17:10.053591Z",
            "url": "https://files.pythonhosted.org/packages/dd/ca/1e58fe908b743c2fe967a3ac2f48b0f504fd8d3f500201e7852cd6aecc28/syft-0.8.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-03 12:17:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "OpenMined",
    "github_project": "PySyft",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "syft"
}
        
Elapsed time: 0.24479s