![Versatile Data Kit](./support/images/versatile-data-kit.svg#gh-light-mode-only)
![Versatile Data Kit](./support/images/versatile-data-kit.svg#gh-dark-mode-only)

---

   One framework to🧑💻 Develop   ▶ Deploy  and 📊 Operate

   data workflows with Python and SQL

---

    🎯 Write shorter, more readable code.

    🔄 Ready-to-use data ETL/ELT patterns.

    🧩 Lego-like extensibility.

    🚀 Single click deployment.

    🛠 Operate and monitor.

---

Introduction to the VDK SDK

Framework to simplify data ingestion and data processing.

Write any code using Python or SQL.

A toolset enabling you to run data jobs.

Get started with VDK SDK:

        ➡ Install Quickstart VDK. Only requirement is Python 3.7+.

pip install quickstart-vdk
vdk --help

        ➡ Develop your First Data Job if you are impatient to start quickly.

        <video controls loop autoplay muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/1e768ddb-c622-45e2-bfd9-20dd2ae9c1dd" aria-label="30 seconds video tutorial of getting started and quickstart-vdk installation"></video>

Data Ingestion

Extract data from various sources (HTTP APIs, Databases, CSV, etc.).

Ensure data fidelity with minimal transformations.

Load data to your preferred destination (database, cloud storage).

Ingestion examples:

        ➡  Ingesting data from REST API into Database

        ➡  Ingesting data from DB into Database

        ➡  Ingesting local CSV file into Database

        ➡  Incremental ingestion using Job Properties

        <video controls loop muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/a46a5ecb-63f7-4b4f-9e2d-099e80522dac" aria-label="30 seconds video tutorial for Data Ingestion"></video>

Data Transformation

SQL and Python parameterized transformations.

Extensible templates for data modeling.

Creates a dataset or table as a product.

Get started with transforming data:

        ➡  Data Modeling: Treating Data as a Product

        ➡  Processing data using SQL and local database

        ➡  Processing data using Kimball warehousing templates

        <video controls loop muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/56be0a37-257e-4f9d-a558-afd012715dcb" aria-label="30 seconds video tutorial for Data Transformation"></video>

Data Job Deployment (build, deploy, release)

        VDK Control Service provides REST API for users to create, deploy, manage, and execute data jobs in a Kubernetes runtime environment.

Scheduling, packaging, dependencies management, deployment.

Execution management and monitoring.

Source code versioning and tracking. Fast rollback.

Manage state and credentials using Properties and Secrets.

Get started with deploying jobs in control service:

        ➡  Install Local Control Service with vdk server --install

        ➡  Scheduling a Data Job for automatic execution

        ➡  Using VDK DAGs to orchestrate Data Jobs

        <video controls loop muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/5bf96910-ff27-4ecf-a631-c0e64e1db249" aria-label="30 seconds video tutorial for VDK Control Service"></video>

Operations and Monitoring

Use Operations UI to monitor, troubleshoot data workloads in production.

Notifications for errors during Data Job deployment or execution.

Route errors to correct people by classifying them into User or Platform errors.

Get started with operating and monitoring data jobs:

        ➡  Versatile Data Kit UI - Installation and Getting Started

        ➡  VDK Operations User Interface - Versatile Data Kit

        <video controls loop muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/4e4b5677-267d-4b9b-9b61-65ae7623f161" aria-label="30 seconds video tutorial for VDK Operations UI"></video>

Lego like extensibility

Modular: use only what you need. Extensible: build what you miss.

Easy to install any plugins as python packages using pip.

Used in enhancing data processing, ingestion, job execution, command-line lifecycle

Get started with using some VDK plugins:

        ➡  Browse available plugins

        ➡  Interesting plugins to check out:

               Track Lineage of your jobs using vdk-lineage

               Import/Ingest or Export CSV files using vdk-csv

        ➡  Write your own plugin

      <video controls loop muted preload="metadata" src="https://github.com/vmware/versatile-data-kit/assets/2536458/2fea5d6e-3fe4-475f-91ec-89838f18ebf3" aria-label="30 seconds video tutorial for VDK Plugins"></video>

# Support and Contributing
For Support, you can join our Slack channel, create an [issue](https://github.com/vmware/versatile-data-kit/issues) or [pull request](https://github.com/vmware/versatile-data-kit/pulls) on GitHub to submit suggestions or changes.

If you are interested in contributing as a developer, visit the [contributing](https://github.com/vmware/versatile-data-kit/blob/main/CONTRIBUTING.md) page.

# Contacts
- Message us on Slack:

    ☝ Join the [CNCF Slack workspace](https://communityinviter.com/apps/cloud-native/cncf).

    ✌ Join the [#versatile-data-kit](https://cloud-native.slack.com/archives/C033PSLKCPR) channel.
- Join the [next Community Meeting](https://github.com/vmware/versatile-data-kit/wiki/Community-Meetings)
- Follow us on [Twitter](https://twitter.com/VDKProject).
- Subscribe to the [Versatile Data Kit YouTube Channel](https://www.youtube.com/channel/UCasf2Q7X8nF7S4VEmcTHJ0Q).
- Join our [development mailing list](mailto:join-versatiledatakit@groups.vmware.com), used by developers and maintainers of VDK.

# Code of Conduct
Everyone involved in working on the project's source code, or engaging in any issue trackers, Slack channels,
and mailing lists is expected to be familiar with and follow the [Code of Conduct](https://github.com/vmware/versatile-data-kit/blob/main/CODE_OF_CONDUCT.md).


 <picture>
   <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/4006792/214640818-fd4de9e6-bdee-47f0-ae66-e69ee9ec84bb.png">
   <source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/4006792/214636328-8e4f83e8-66cb-4114-a3d8-473eb908b9c3.png">

 </picture>

  Commerce that works with your language and stack

  GraphQL native, API-only platform for scalable composable commerce.

  Join our community:

  Website
   |
  Twitter
   |
  GitHub Discussions
   |
  Discord

   Blog
   |
  Subscribe to newsletter

## Table of Contents

- [What makes Saleor special?](#what-makes-saleor-special)
- [Features](#features)
- [Installation](#installation)
- [Documentation](#documentation)
- [Contributing](#contributing)
- [Your feedback](#your-feedback)
- [License](#license)

## What makes Saleor special?

- **Technology-agnostic** - no monolithic plugin architecture or technology lock-in.

- **GraphQL only** - Not afterthought API design or fragmentation across different styles of API.

- **Headless and API only** - APIs are the only way to interact, configure, or extend the backend.

- **Open source** -  a single version of Saleor without feature fragmentation or commercial limitations.

- **Cloud native** - battle tested on global brands.

- **Native-multichannel** - Per [channel](https://docs.saleor.io/docs/3.x/developer/channels) control of pricing, currencies, stock, product, and more.

## Why API-only Architecture?

Saleor's API-first extensibility provides powerful tools for developers to extend backend using [webhooks](https://docs.saleor.io/docs/3.x/developer/extending/webhooks/overview), attributes, [metadata](https://docs.saleor.io/docs/3.x/api-usage/metadata), [apps](https://docs.saleor.io/docs/3.x/developer/extending/apps/overview), [subscription queries](https://docs.saleor.io/docs/3.x/developer/extending/webhooks/subscription-webhook-payloads), [API extensions](https://docs.saleor.io/docs/3.x/developer/extending/webhooks/synchronous-events/overview), [dashboard iframes](https://docs.saleor.io/docs/3.x/developer/extending/apps/overview).

Compared to traditional plugin architectures (monoliths) it provides the following benefits:

* There is less downtime as apps are deployed independently.
* Reliability and performance - custom logic is separated from the core.
* Simplified upgrade paths - eliminates incompatibility conflicts between extensions.
* Technology-agnostic - works with any technology, stack, or language.
* Parallel development - easier to collaborate than with a monolithic core.
* Simplified debugging - easier to narrow down bugs in independent services.
* Scalability - extensions and apps can be scaled independently.

### What are the tradeoffs?
If you are a single developer working with a small business that doesn't have high traffic or a critical need for 24/7 availability, using a service-oriented approach might feel more complex compared to the traditional WordPress or Magento approach that provides a language-specific framework, runtime, database schema, aspect-oriented programming, and other tools to a quick start.

However, if you deploy on a daily basis, reliability and uptime is critical,
you need to collaborate with other developers, or you have non-trivial requirements you might be in the right place.

## Features
- **Enterprise ready**: Secure, scalable, and stable. Battle-tested by big brands
- **Dashboard**: User-friendly, fast, and productive. (Decoupled project [repo](https://github.com/saleor/saleor-dashboard) )
- **Global by design** Multi-currency, multi-language, multi-warehouse, tutti multi!
- **CMS**: Manage product or marketing content.
- **Product management**: A rich content model for large and complex catalogs.
- **Orders**: Flexible order model, split payments, multi-warehouse, returns, and more.
- **Customers**: Order history and preferences.
- **Promotion engine**: Sales, vouchers, cart rules, giftcards.
- **Payment orchestration**: multi-gateway, extensible payment API, flexible flows.
- **Cart**: Advanced payment and tax options, with full control over discounts and promotions.
- **Payments**: Flexible API architecture allows integration of any payment method.
- **Translations**: Fully translatable catalog.
- **SEO**: Unlimited SEO freedom with headless architecture.
- **Apps**: Extend dashboard via iframe with any web stack.

![Saleor Dashboard - Modern UI for managing your e-commerce](https://user-images.githubusercontent.com/9268745/224249510-d3c7658e-6d5c-42c5-b4fb-93eaf65a5335.png)

## Installation

[See the Saleor docs](https://docs.saleor.io/docs/3.x/developer/installation) for step-by-step installation and deployment instructions.

Note:
The `main` branch is the development version of Saleor and it may be unstable. To use the latest stable version, download it from the [Releases](https://github.com/saleor/saleor/releases/) page or switch to a release tag.

The current production-ready version is 3.x and you should use this version for all three components:

- Saleor: https://github.com/saleor/saleor/releases/
- Dashboard: https://github.com/saleor/saleor-dashboard/releases/
- Storefront: https://github.com/saleor/react-storefront/releases/

### Saleor Cloud
The fastest way to develop with Saleor is by using developer accounts in [Saleor Cloud](https://cloud.saleor.io).

Register [here](https://cloud.saleor.io/register) or install our [CLI tool](https://github.com/saleor/saleor-cli):

`npm i -g @saleor/cli`

and run the following command:

`saleor register`

Bootstrap your first [storefront](https://github.com/saleor/react-storefront) with:

`saleor storefront create --url {your-saleor-graphql-endpoint}`

## Documentation

Saleor documentation is available here: [docs.saleor.io](https://docs.saleor.io)

To contribute, please see the [`saleor/saleor-docs` repository](https://github.com/saleor/saleor-docs/).

## Saleor Platform

The easiest way to run all components of Saleor (API, storefront, and dashboard) together on your local machine is to use the [saleor-platform](https://github.com/saleor/saleor-platform) project. Go to that repository for instructions on how to use it.

[View saleor-platform](https://github.com/saleor/saleor-platform)

## Storefront

An open-source storefront example built with Next.js App Router, React.js, TypeScript, GraphQL, and Tailwind CSS.

[React Storefront Repository](https://github.com/saleor/storefront)

[View Storefront Example](https://storefront.saleor.io/)

## Dashboard

For the dashboard, go to the [saleor-dashboard](https://github.com/saleor/saleor-dashboard) repository.

## Contributing

We love your contributions and do our best to provide you with mentorship and support. If you are looking for an issue to tackle, take a look at issues labeled [`Good first issue`](https://github.com/saleor/saleor/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+)

If nothing grabs your attention, check [our roadmap](https://github.com/orgs/saleor/projects/3/views/4) or come up with your feature. Just drop us a line or [open an issue](https://github.com/saleor/saleor/issues/new) and we’ll work out how to handle it.

Get more details in our [Contributing Guide](https://docs.saleor.io/docs/developer/community/contributing).

## License

Disclaimer: Everything you see here is open and free to use as long as you comply with the [license](https://github.com/saleor/saleor/blob/master/LICENSE). There are no hidden charges. We promise to do our best to fix bugs and improve the code.

#### Crafted with ❤ by [Saleor Commerce](https://saleor.io)

hello@saleor.io


# NiceGUI

NiceGUI is an easy-to-use, Python-based UI framework, which shows up in your web browser.
You can create buttons, dialogs, Markdown, 3D scenes, plots and much more.

It is great for micro web apps, dashboards, robotics projects, smart home solutions and similar use cases.
You can also use it in development, for example when tweaking/configuring a machine learning algorithm or tuning motor controllers.

NiceGUI is available as [PyPI package](https://pypi.org/project/nicegui/), [Docker image](https://hub.docker.com/r/zauberzeug/nicegui) and on [conda-forge](https://anaconda.org/conda-forge/nicegui) as well as [GitHub](https://github.com/zauberzeug/nicegui).

[![PyPI](https://img.shields.io/pypi/v/nicegui?color=dark-green)](https://pypi.org/project/nicegui/)
[![PyPI downloads](https://img.shields.io/pypi/dm/nicegui?color=dark-green)](https://pypi.org/project/nicegui/)
[![Conda version](https://img.shields.io/conda/v/conda-forge/nicegui?color=green&label=conda-forge)](https://anaconda.org/conda-forge/nicegui)
[![Conda downloads](https://img.shields.io/conda/dn/conda-forge/nicegui?color=green&label=downloads)](https://anaconda.org/conda-forge/nicegui)
[![Docker pulls](https://img.shields.io/docker/pulls/zauberzeug/nicegui)](https://hub.docker.com/r/zauberzeug/nicegui)

[![GitHub license](https://img.shields.io/github/license/zauberzeug/nicegui?color=orange)](https://github.com/zauberzeug/nicegui/blob/main/LICENSE)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/zauberzeug/nicegui)](https://github.com/zauberzeug/nicegui/graphs/commit-activity)
[![GitHub issues](https://img.shields.io/github/issues/zauberzeug/nicegui?color=blue)](https://github.com/zauberzeug/nicegui/issues)
[![GitHub forks](https://img.shields.io/github/forks/zauberzeug/nicegui)](https://github.com/zauberzeug/nicegui/network)
[![GitHub stars](https://img.shields.io/github/stars/zauberzeug/nicegui)](https://github.com/zauberzeug/nicegui/stargazers)

## Features

- browser-based graphical user interface
- implicit reload on code change
- acts as webserver (accessed by the browser) or in native mode (eg. desktop window)
- standard GUI elements like label, button, checkbox, switch, slider, input, file upload, ...
- simple grouping with rows, columns, cards and dialogs
- general-purpose HTML and Markdown elements
- powerful high-level elements to
  - plot graphs and charts,
  - render 3D scenes,
  - get steering events via virtual joysticks
  - annotate and overlay images
  - interact with tables
  - navigate foldable tree structures
  - embed video and audio files
- built-in timer to refresh data in intervals (even every 10 ms)
- straight-forward data binding and refreshable functions to write even less code
- notifications, dialogs and menus to provide state of the art user interaction
- shared and individual web pages
- easy-to-use per-user and general persistence
- ability to add custom routes and data responses
- capture keyboard input for global shortcuts etc.
- customize look by defining primary, secondary and accent colors
- live-cycle events and session data
- runs in Jupyter Notebooks and allows Python's interactive mode
- auto-complete support for Tailwind CSS
- SVG, Base64 and emoji favicon support
- testing framework based on pytest

## Installation

```bash
python3 -m pip install nicegui
```

## Usage

Write your nice GUI in a file `main.py`:

```python
from nicegui import ui

ui.label('Hello NiceGUI!')
ui.button('BUTTON', on_click=lambda: ui.notify('button was pressed'))

ui.run()
```

Launch it with:

```bash
python3 main.py
```

The GUI is now available through http://localhost:8080/ in your browser.
Note: NiceGUI will automatically reload the page when you modify the code.

## Documentation and Examples

The documentation is hosted at [https://nicegui.io/documentation](https://nicegui.io/documentation) and provides plenty of live demos.
The whole content of [https://nicegui.io](https://nicegui.io) is [implemented with NiceGUI itself](https://github.com/zauberzeug/nicegui/blob/main/main.py).

You may also have a look at our [in-depth examples](https://github.com/zauberzeug/nicegui/tree/main/examples) of what you can do with NiceGUI.
In our wiki we have a list of great [NiceGUI projects from the community](https://github.com/zauberzeug/nicegui/wiki#community-projects), a section with [Tutorials](https://github.com/zauberzeug/nicegui/wiki#tutorials), a growing list of [FAQs](https://github.com/zauberzeug/nicegui/wiki/FAQs) and [some strategies for using ChatGPT / LLMs to get help about NiceGUI](https://github.com/zauberzeug/nicegui/wiki#chatgpt).

## Why?

We at [Zauberzeug](https://zauberzeug.com) like [Streamlit](https://streamlit.io/)
but find it does [too much magic](https://github.com/zauberzeug/nicegui/issues/1#issuecomment-847413651) when it comes to state handling.
In search for an alternative nice library to write simple graphical user interfaces in Python we discovered [JustPy](https://justpy.io/).
Although we liked the approach, it is too "low-level HTML" for our daily usage.
But it inspired us to use [Vue](https://vuejs.org/) and [Quasar](https://quasar.dev/) for the frontend.

We have built on top of [FastAPI](https://fastapi.tiangolo.com/),
which itself is based on the ASGI framework [Starlette](https://www.starlette.io/)
and the ASGI webserver [Uvicorn](https://www.uvicorn.org/)
because of their great performance and ease of use.

## Sponsors

Maintenance of this project is made possible by all the [contributors](https://github.com/zauberzeug/nicegui/graphs/contributors) and [sponsors](https://github.com/sponsors/zauberzeug).
If you would like to support this project and have your avatar or company logo appear below, please [sponsor us](https://github.com/sponsors/zauberzeug). 💖

Consider this low-barrier form of contribution yourself.
Your [support](https://github.com/sponsors/zauberzeug) is much appreciated.

## Contributing

Thank you for your interest in contributing to NiceGUI! We are thrilled to have you on board and appreciate your efforts to make this project even better.

As a growing open-source project, we understand that it takes a community effort to achieve our goals. That's why we welcome all kinds of contributions, no matter how small or big they are. Whether it's adding new features, fixing bugs, improving documentation, or suggesting new ideas, we believe that every contribution counts and adds value to our project.

We have provided a detailed guide on how to contribute to NiceGUI in our [CONTRIBUTING.md](https://github.com/zauberzeug/nicegui/blob/main/CONTRIBUTING.md) file. We encourage you to read it carefully before making any contributions to ensure that your work aligns with the project's goals and standards.

If you have any questions or need help with anything, please don't hesitate to reach out to us. We are always here to support and guide you through the contribution process.

## Included Web Dependencies

See [DEPENDENCIES.md](https://github.com/zauberzeug/nicegui/blob/main/DEPENDENCIES.md) for a list of web frameworks NiceGUI depends on.


# CloudEvents

<!-- no verify-specs -->

![CloudEvents logo](https://github.com/cncf/artwork/blob/main/projects/cloudevents/horizontal/color/cloudevents-horizontal-color.png?raw=true)

[![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/cloudevents/badge)](https://clomonitor.io/projects/cncf/cloudevents)
[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/6770/badge)](https://bestpractices.coreinfrastructure.org/projects/6770)

Events are everywhere. However, event producers tend to describe events
differently.

The lack of a common way of describing events means developers must constantly
re-learn how to consume events. This also limits the potential for libraries,
tooling and infrastructure to aide the delivery of event data across
environments, like SDKs, event routers or tracing systems. The portability and
productivity we can achieve from event data is hindered overall.

CloudEvents is a specification for describing event data in common formats to
provide interoperability across services, platforms and systems.

CloudEvents has received a large amount of industry interest, ranging from major
cloud providers to popular SaaS companies. CloudEvents is hosted by the
[Cloud Native Computing Foundation](https://cncf.io) (CNCF) and was approved as
a Cloud Native sandbox level project on
[May 15, 2018](https://docs.google.com/presentation/d/1KNSv70fyTfSqUerCnccV7eEC_ynhLsm9A_kjnlmU_t0/edit#slide=id.g37acf52904_1_41), an
incubator project on [Oct 24, 2019](https://github.com/cncf/toc/pull/297)
and a graduated project on [Jan 25, 2024](https://github.com/cncf/toc/pull/996)
([announcement](https://www.cncf.io/announcements/2024/01/25/cloud-native-computing-foundation-announces-the-graduation-of-cloudevents/)).

## CloudEvents Documents

|                               |                                 Latest Release                                  |                                      Working Draft                                       |
| :---------------------------- | :-----------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: |
| **Core Specification:**       |
| CloudEvents                   | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md)   | [WIP](cloudevents/spec.md) |
|                               |
| **Optional Specifications:**  |
| AMQP Protocol Binding         | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/amqp-protocol-binding.md)  | [WIP](cloudevents/bindings/amqp-protocol-binding.md)       |
| AVRO Event Format             | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/avro-format.md)             | [WIP](cloudevents/formats/avro-format.md)                  |
| AVRO Compact Event Format       | | [WIP](cloudevents/working-drafts/avro-compact-format.md)             |
| HTTP Protocol Binding         | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md)  | [WIP](cloudevents/bindings/http-protocol-binding.md)       |
| JSON Event Format             | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md)             | [WIP](cloudevents/formats/json-format.md)                  |
| Kafka Protocol Binding        | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/kafka-protocol-binding.md) | [WIP](cloudevents/bindings/kafka-protocol-binding.md)      |
| MQTT Protocol Binding         | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/mqtt-protocol-binding.md)  | [WIP](cloudevents/bindings/mqtt-protocol-binding.md)       |
| NATS Protocol Binding         | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/nats-protocol-binding.md)  | [WIP](cloudevents/bindings/nats-protocol-binding.md)       |
| WebSockets Protocol Binding   | -                                                                                | [WIP](cloudevents/bindings/websockets-protocol-binding.md) |
| Protobuf Event Format         | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/protobuf-format.md)         | [WIP](cloudevents/formats/protobuf-format.md)              |
| XML Event Format              | -                                                                                | [WIP](cloudevents/working-drafts/xml-format.md)            |
| Web hook                      | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/http-webhook.md)                    | [WIP](cloudevents/http-webhook.md)                         |
|                               |
| **Additional Documentation:** |
| CloudEvents Primer                                             | [v1.0.2](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/primer.md) | [WIP](cloudevents/primer.md)                          |
| [CloudEvents Adapters](cloudevents/adapters.md)                | -                                                                               | [Not versioned](cloudevents/adapters.md)              |
| [CloudEvents SDK Requirements](cloudevents/SDK.md)             | -                                                                               | [Not versioned](cloudevents/SDK.md)                   |
| [Documented Extensions](cloudevents/extensions/README.md)  | -                                                                               | [Not versioned](cloudevents/extensions/README.md) |
| [Proprietary Specifications](cloudevents/proprietary-specs.md) | -                                                                               | [Not versioned](cloudevents/proprietary-specs.md)     |

## Other Specifications
|                 | Latest Release                                                  | Working Draft                 |
| :-------------- | :-------------------------------------------------------------: | :---------------------------: |
| CE SQL          | [v1.0.0](https://github.com/cloudevents/spec/tree/cesql/v1.0.0/cesql) | [WIP](cesql/spec.md)          |
| Subscriptions   |                                 -                               | [WIP](subscriptions/spec.md)  |

The Registry and Pagination specifications can now be found in the
[xRegistry/spec](https://github.com/xregistry/spec) repo.

Additional release related information:
  [Historical releases and changelogs](docs/RELEASES.md)

If you are new to CloudEvents, it is recommended that you start by reading the
[Primer](cloudevents/primer.md) for an overview of the specification's goals
and design decisions, and then move on to the
[core specification](cloudevents/spec.md).

Since not all event producers generate CloudEvents by default, there is
documentation describing the recommended process for adapting some popular
events into CloudEvents, see
[CloudEvents Adapters](cloudevents/adapters.md).

## SDKs

In addition to the documentation mentioned above, there are also a set of
language specific SDKs being developed:

- [C#/.NET](https://github.com/cloudevents/sdk-csharp)
- [Go](https://github.com/cloudevents/sdk-go)
- [Java](https://github.com/cloudevents/sdk-java)
- [Javascript](https://github.com/cloudevents/sdk-javascript)
- [PHP](https://github.com/cloudevents/sdk-php)
- [PowerShell](https://github.com/cloudevents/sdk-powershell)
- [Python](https://github.com/cloudevents/sdk-python)
- [Ruby](https://github.com/cloudevents/sdk-ruby)
- [Rust](https://github.com/cloudevents/sdk-rust)

The [SDK requirements](cloudevents/SDK.md) document provides information
on how the SDKs are managed and what is expected of each one.
The SDK [feature support table](cloudevents/SDK.md#feature-support) is a
good resource to see which features, event formats and bindings are supported
by each SDK.

For more information about how the SDKs operate, please see the following
documents:
- [SDK Governance](docs/SDK-GOVERNANCE.md)
- [SDK Maintainer Guidlines](docs/SDK-maintainer-guidelines.md)
- [SDK PR Guidlines](docs/SDK-PR-guidelines.md)

## Community and Docs

Learn more about the people and organizations who are creating a dynamic cloud
native ecosystem by making our systems interoperable with CloudEvents.

- Our [Governance](docs/GOVERNANCE.md) documentation.
- [Contributing](docs/CONTRIBUTING.md) guidance.
- [Roadmap](docs/ROADMAP.md)
- [Adopters](https://cloudevents.io/) - See "Integrations".
- [Contributors](docs/contributors.md): people and organizations who helped
  us get started or are actively working on the CloudEvents specification.
- [Presentations, notes and other misc shared
  docs](https://drive.google.com/drive/folders/1eKH-tVNV25jwkuBEoi3ESqvVjNRlJqYX?usp=sharing)
- [Demos & open source](docs/README.md) -- if you have something to share
  about your use of CloudEvents, please submit a PR!
- [Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)

### Security Concerns

If there is a security concern with one of the CloudEvents specifications, or
with one of the project's SDKs, please send an email to
[cncf-cloudevents-security@lists.cncf.io](mailto:cncf-cloudevents-security@lists.cncf.io).

A security assessment was performed by
[Trail of Bits](https://www.trailofbits.com/) in October 2022. The report
can be found [here](docs/CE-SecurityAudit-2022-10.pdf) or on the Trail of Bits
[website](https://github.com/trailofbits/publications/blob/master/reviews/CloudEvents.pdf).

### Communications

The main mailing list for e-mail communications:

- Send emails to: [cncf-cloudevents](mailto:cncf-cloudevents@lists.cncf.io)
- To subscribe see: https://lists.cncf.io/g/cncf-cloudevents
- Archives are at: https://lists.cncf.io/g/cncf-cloudevents/topics

And a #cloudevents Slack channel under
[CNCF's Slack workspace](http://slack.cncf.io/).

For SDK related comments and questions:

- Email to: [cncf-cloudevents-sdk](mailto:cncf-cloudevents-sdk@lists.cncf.io)
- To subscribe see: https://lists.cncf.io/g/cncf-cloudevents-sdk
- Archives are at: https://lists.cncf.io/g/cncf-cloudevents-sdk/topics
- Slack: #cloudeventssdk on [CNCF's Slack workspace](http://slack.cncf.io/)

For SDK specific communications, please see the main README in each
SDK's github repo - see the [list of SDKs](#sdks).

### Meeting Time

See the [CNCF public events calendar](https://www.cncf.io/community/calendar/).
This specification is being developed by the
[CNCF Serverless Working Group](https://github.com/cncf/wg-serverless). This
working group meets every Thursday at 9AM PT (USA Pacific)
([World Time Zone Converter](http://www.thetimezoneconverter.com/?t=9:00%20am&tz=San%20Francisco&)):

Please see the
[meeting minutes doc](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit#)
for the latest information on how to join the calls.

Recording from our calls are available
[here](https://www.youtube.com/playlist?list=PLO-qzjSpLN1BEyKjOVX_nMg7ziHXUYwec), and
older ones are
[here](https://www.youtube.com/playlist?list=PLj6h78yzYM2Ph7YoBIgsZNW_RGJvNlFOt).

Periodically, the group may have in-person meetings that coincide with a major
conference. Please see the
[meeting minutes doc](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit#)
for any future plans.


# Fabulously Optimized

[![Official Website][img-website]][url-website]
[![Support and Contribute][img-contribute]][url-contribute]
[![Read the Wiki][img-wiki]][url-wiki]

[![Mod list][img-mods]][file-mods]
[![Changed Options][img-options]][url-options]
[![Resource Packs][img-rp]][url-rp]
[![Help us Translate][img-translate]][url-translate]

[![Discord][img-discord]][url-discord]
[![GitHub][img-github]][url-github]
[![Mastodon][img-mastodon]][url-mastodon]

A simple Minecraft modpack focusing on performance and graphics enhancements.

## Download

[![Installation Guide][img-install]][url-install]
[![CurseForge][img-cf]][url-cf]
[![Modrinth][img-modrinth]][url-modrinth]

> By downloading Fabulously Optimized, you have acknowledged the [disclaimers][url-terms].

We recommend and support five launchers, all of which can be used offline on 🪟 Windows, 🐧 Linux and 🍏 macOS.

See this table for a comparison between the launchers:

| Launcher                                      |               Tutorial               |    Install    |     Upgrade     |   Add mods    | Support us and mods |
| --------------------------------------------- | :----------------------------------: | :-----------: | :-------------: | :-----------: | :-----------------: |
| [CurseForge App][url-app-cf]                  |    [🔗 Open][url-tutorial-cf]    |  ✅ Easy  |   ✅ Easy   |  ✅ Easy  |     ✅ Yes      |
| [Modrinth App][url-app-modrinth]              | [🔗 Open][url-tutorial-modrinth] |  ✅ Easy  |   ✅ Easy   |  ✅ Easy  |     ✅ Yes      |
| [Prism Launcher][url-app-prism]               |  [🔗 Open][url-tutorial-prism]   |  ✅ Easy  |   ✅ Easy   |  ✅ Easy  |   ⏺[2]   |
| [MultiMC][url-app-multimc]                    | [🔗 Open][url-tutorial-multimc]  |  ✅ Easy  |  ❌ Manual  | ❌ Manual |   ⏺[2]   |
| [MultiMC (auto-update)][url-app-mmcu]           |   [🔗 Open][url-tutorial-mmcu]   |  ✅ Easy  | ⏺[1] | ❌ Manual |   ⏺[2]   |
| [Minecraft Launcher (vanilla)][url-app-vanilla] | [🔗 Open][url-tutorial-vanilla]  | ❌ Manual |  ❌ Manual  | ❌ Manual |   ⏺[2]   |

> [!NOTE]
>
> **[1]**: Updates to the modpack within the same Minecraft version are automatic. The modpack cannot be updated automatically across Minecraft versions.
>
> **[2]**: These launchers support the modpack and its mods by increasing their download count, but not with monetary benefits.

Download Resource Packs separately

FO includes some resource packs [for a better experience][url-rp], but they can also be downloaded separately.

| Resource Pack             | CurseForge                  | Modrinth                        | Planet Minecraft                   |
| ------------------------- | --------------------------- | ------------------------------- | ---------------------------------- |
| **Chat Reporting Helper** | [CurseForge][url-rp-crh-cf] | [Modrinth][url-rp-crh-modrinth] | [Planet Minecraft][url-rp-crh-pmc] |
| **Fast Better Grass**     | [CurseForge][url-rp-fbg-cf] | [Modrinth][url-rp-fbg-modrinth] | [Planet Minecraft][url-rp-fbg-pmc] |

## Credits

- [TheYTG123][url-credits-TheYTG123] on CurseForge who helped with Jumploader to release the 1.16.3 version a little faster
- [triphora][url-credits-triphora] who suggested and helped with the Modrinth format, and formerly moderated the FO Discord server
- [RozeFound][url-credits-RozeFound] for helping with Python scripts and providing lots of constructive feedback for the pack
- [TheMadHau5][url-credits-TheMadHau5], [redbrain][url-credits-redbrain], [Kichura][url-credits-Kichura] for the [fancy mod table][file-mods]
- [RaptaG][url-credits-RaptaG] and [Ultrasonic1209][url-credits-Ultrasonic1209] for the [Packwiz mod ignoring tutorials][url-tutorial-mmcu-ignoremods]
- [IMB11][url-credits-IMB11] for the fancy website
- [Miroma][url-credits-Miroma] for the current version of this readme
- Other people creating pull requests for [the main project][url-github-main-graph], [wiki][url-github-wiki-graph] and [other organization projects][url-github-org]
- People who have created videos about the modpack
- Everyone who has suggested ideas and reported bugs!

Special thanks to:

- [jellysquid3][url-credits-jellysquid3] for creating [Sodium][url-credits-jellysquid3-sodium], [Lithium][url-credits-jellysquid3-lithium], [Phosphor][url-credits-jellysquid3-phosphor] which were the initial inspiration for creating the modpack
- [LambdAurora][url-credits-LambdAurora] for creating [the list of OptiFine alternatives][url-credits-LambdAurora-alternatives] which the pack does get some mod ideas from, and [LambDynamicLights][url-credits-LambdAurora-LambDynamicLights]
- [comp500][url-credits-comp500] for creating [Jumploader][url-credits-comp500-Jumploader] - a mod that made the modpack possible in Minecraft 1.16.x, [Indium][url-credits-comp500-Indium] - mod that provided the rendering API for Sodium for increased mod compatibility and [packwiz][url-credits-comp500-packwiz] - a tool that makes the MultiMC auto-update happen
- Mod devs who have joined the Discord and are discussing the modpack's development there
- All developers who made the mods that are, have been and will be in the modpack
- Everyone who uses, tests and shares the modpack!

[file-mods]: <INCLUDED-MODS.md>

[img-cf]: <https://img.shields.io/curseforge/dt/396246?style=for-the-badge&label=CurseForge&color=orange&logoColor=orange&labelColor=black&logo=curseforge>
[img-discord]: <https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscordapp.com%2Fapi%2Finvites%2Ffabulously-optimized-859124104644788234%3Fwith_counts%3Dtrue&query=approximate_member_count&style=for-the-badge&label=Discord&color=5865F2&logoColor=white&labelColor=black&logo=discord>
[img-github]: <https://img.shields.io/github/stars/Fabulously-Optimized/fabulously-optimized?style=for-the-badge&label=Stars&color=white&logoColor=white&labelColor=black&logo=github>
[img-install]: <https://img.shields.io/badge/Installation%20Guide-black?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtMzIwIDI4MC01MjBsNTYtNTggMTA0IDEwNHYtMzI2aDgwdjMyNmwxMDQtMTA0IDU2IDU4LTIwMCAyMDBaTTI0MC0xNjBxLTMzIDAtNTYuNS0yMy41VDE2MC0yNDB2LTEyMGg4MHYxMjBoNDgwdi0xMjBoODB2MTIwcTAgMzMtMjMuNSA1Ni41VDcyMC0xNjBIMjQwWiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg%3D%3D>
[img-mastodon]: <https://img.shields.io/mastodon/follow/109406313733713199?style=for-the-badge&domain=https%3A%2F%2Ffloss.social%2F&label=Mastodon&color=6364FF&logoColor=white&labelColor=black&logo=mastodon>
[img-modrinth]: <https://img.shields.io/modrinth/dt/1KVo5zza?style=for-the-badge&label=Modrinth&color=darkgreen&labelColor=black&logo=modrinth>
[img-mods]: <https://img.shields.io/badge/Mod_list-darkgreen?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik0yODAtNjAwdi04MGg1NjB2ODBIMjgwWm0wIDE2MHYtODBoNTYwdjgwSDI4MFptMCAxNjB2LTgwaDU2MHY4MEgyODBaTTE2MC02MDBxLTE3IDAtMjguNS0xMS41VDEyMC02NDBxMC0xNyAxMS41LTI4LjVUMTYwLTY4MHExNyAwIDI4LjUgMTEuNVQyMDAtNjQwcTAgMTctMTEuNSAyOC41VDE2MC02MDBabTAgMTYwcS0xNyAwLTI4LjUtMTEuNVQxMjAtNDgwcTAtMTcgMTEuNS0yOC41VDE2MC01MjBxMTcgMCAyOC41IDExLjVUMjAwLTQ4MHEwIDE3LTExLjUgMjguNVQxNjAtNDQwWm0wIDE2MHEtMTcgMC0yOC41LTExLjVUMTIwLTMyMHEwLTE3IDExLjUtMjguNVQxNjAtMzYwcTE3IDAgMjguNSAxMS41VDIwMC0zMjBxMCAxNy0xMS41IDI4LjVUMTYwLTI4MFoiIGZpbGw9IiNmZmZmZmYiLz48L3N2Zz4%3D>
[img-options]: <https://img.shields.io/badge/Changed_Options-blue?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00NDAtMTIwdi0yNDBoODB2ODBoMzIwdjgwSDUyMHY4MGgtODBabS0zMjAtODB2LTgwaDI0MHY4MEgxMjBabTE2MC0xNjB2LTgwSDEyMHYtODBoMTYwdi04MGg4MHYyNDBoLTgwWm0xNjAtODB2LTgwaDQwMHY4MEg0NDBabTE2MC0xNjB2LTI0MGg4MHY4MGgxNjB2ODBINjgwdjgwaC04MFptLTQ4MC04MHYtODBoNDAwdjgwSDEyMFoiIGZpbGw9IiNmZmZmZmYiLz48L3N2Zz4%3D>
[img-rp]: <https://img.shields.io/badge/Resource_Packs-purple?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Im0zNTItNTIyIDg2LTg3LTU2LTU3LTQ0IDQ0LTU2LTU2IDQzLTQ0LTQ1LTQ1LTg3IDg3IDE1OSAxNThabTMyOCAzMjkgODctODctNDUtNDUtNDQgNDMtNTYtNTYgNDMtNDQtNTctNTYtODYgODYgMTU4IDE1OVptMjQtNTY3IDU3IDU3LTU3LTU3Wk0yOTAtMTIwSDEyMHYtMTcwbDE3NS0xNzVMODAtNjgwbDIwMC0yMDAgMjE2IDIxNiAxNTEtMTUycTEyLTEyIDI3LTE4dDMxLTZxMTYgMCAzMSA2dDI3IDE4bDUzIDU0cTEyIDEyIDE4IDI3dDYgMzFxMCAxNi02IDMwLjVUODE2LTY0N0w2NjUtNDk1bDIxNSAyMTVMNjgwLTgwIDQ2NS0yOTUgMjkwLTEyMFptLTkwLTgwaDU2bDM5Mi0zOTEtNTctNTctMzkxIDM5MnY1NlptNDIwLTQxOS0yOS0yOSA1NyA1Ny0yOC0yOFoiIGZpbGw9IiNmZmZmZmYiLz48L3N2Zz4%3D>
[img-contribute]: <https://img.shields.io/badge/Support_and_Contribute-red?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Im00ODAtMTIwLTU4LTUycS0xMDEtOTEtMTY3LTE1N1QxNTAtNDQ3LjVRMTExLTUwMCA5NS41LTU0NFQ4MC02MzRxMC05NCA2My0xNTd0MTU3LTYzcTUyIDAgOTkgMjJ0ODEgNjJxMzQtNDAgODEtNjJ0OTktMjJxOTQgMCAxNTcgNjN0NjMgMTU3cTAgNDYtMTUuNSA5MFQ4MTAtNDQ3LjVRNzcxLTM5NSA3MDUtMzI5VDUzOC0xNzJsLTU4IDUyWiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==>
[img-translate]: <https://img.shields.io/badge/Help_us_Translate-orange?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Im00NzYtODAgMTgyLTQ4MGg4NEw5MjQtODBoLTg0bC00My0xMjJINjAzTDU2MC04MGgtODRaTTE2MC0yMDBsLTU2LTU2IDIwMi0yMDJxLTM1LTM1LTYzLjUtODBUMTkwLTY0MGg4NHEyMCAzOSA0MCA2OHQ0OCA1OHEzMy0zMyA2OC41LTkyLjVUNDg0LTcyMEg0MHYtODBoMjgwdi04MGg4MHY4MGgyODB2ODBINTY0cS0yMSA3Mi02MyAxNDh0LTgzIDExNmw5NiA5OC0zMCA4Mi0xMjItMTI1LTIwMiAyMDFabTQ2OC03MmgxNDRsLTcyLTIwNC03MiAyMDRaIiBmaWxsPSIjZmZmZmZmIi8%2BPC9zdmc%2B>
[img-website]: <https://img.shields.io/badge/Official_Website-DBD0B5?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtODBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC03LS41LTE0LjVUNzk5LTUwN3EtNSAyOS0yNyA0OHQtNTIgMTloLTgwcS0zMyAwLTU2LjUtMjMuNVQ1NjAtNTIwdi00MEg0MDB2LTgwcTAtMzMgMjMuNS01Ni41VDQ4MC03MjBoNDBxMC0yMyAxMi41LTQwLjVUNTYzLTc4OXEtMjAtNS00MC41LTh0LTQyLjUtM3EtMTM0IDAtMjI3IDkzdC05MyAyMjdoMjAwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y0MEg0MDB2MTEwcTIwIDUgMzkuNSA3LjVUNDgwLTE2MFoiLz48L3N2Zz4%3D>
[img-wiki]: <https://img.shields.io/badge/Read_the_Wiki-423E35?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik01NjAtNTY0di02OHEzMy0xNCA2Ny41LTIxdDcyLjUtN3EyNiAwIDUxIDR0NDkgMTB2NjRxLTI0LTktNDguNS0xMy41VDcwMC02MDBxLTM4IDAtNzMgOS41VDU2MC01NjRabTAgMjIwdi02OHEzMy0xNCA2Ny41LTIxdDcyLjUtN3EyNiAwIDUxIDR0NDkgMTB2NjRxLTI0LTktNDguNS0xMy41VDcwMC0zODBxLTM4IDAtNzMgOXQtNjcgMjdabTAtMTEwdi02OHEzMy0xNCA2Ny41LTIxdDcyLjUtN3EyNiAwIDUxIDR0NDkgMTB2NjRxLTI0LTktNDguNS0xMy41VDcwMC00OTBxLTM4IDAtNzMgOS41VDU2MC00NTRaTTI2MC0zMjBxNDcgMCA5MS41IDEwLjVUNDQwLTI3OHYtMzk0cS00MS0yNC04Ny0zNnQtOTMtMTJxLTM2IDAtNzEuNSA3VDEyMC02OTJ2Mzk2cTM1LTEyIDY5LjUtMTh0NzAuNS02Wm0yNjAgNDJxNDQtMjEgODguNS0zMS41VDcwMC0zMjBxMzYgMCA3MC41IDZ0NjkuNSAxOHYtMzk2cS0zMy0xNC02OC41LTIxdC03MS41LTdxLTQ3IDAtOTMgMTJ0LTg3IDM2djM5NFptLTQwIDExOHEtNDgtMzgtMTA0LTU5dC0xMTYtMjFxLTQyIDAtODIuNSAxMVQxMDAtMTk4cS0yMSAxMS00MC41LTFUNDAtMjM0di00ODJxMC0xMSA1LjUtMjFUNjItNzUycTQ2LTI0IDk2LTM2dDEwMi0xMnE1OCAwIDExMy41IDE1VDQ4MC03NDBxNTEtMzAgMTA2LjUtNDVUNzAwLTgwMHE1MiAwIDEwMiAxMnQ5NiAzNnExMSA1IDE2LjUgMTV0NS41IDIxdjQ4MnEwIDIzLTE5LjUgMzV0LTQwLjUgMXEtMzctMjAtNzcuNS0zMVQ3MDAtMjQwcS02MCAwLTExNiAyMXQtMTA0IDU5Wk0yODAtNDk0WiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg%3D%3D>

[url-app-cf]: <https://curseforge.com/download/app>
[url-app-mmcu]: <https://wiki.download.fo/readme/multimc-auto-update>
[url-app-modrinth]: <https://modrinth.com/app>
[url-app-multimc]: <https://multimc.org>
[url-app-prism]: <https://prismlauncher.org>
[url-app-vanilla]: <https://minecraft.net/en-us/download>
[url-cf]: <https://download.fo/curseforge>
[url-credits-comp500]: <https://github.com/comp500>
[url-credits-comp500-Jumploader]: <https://curseforge.com/minecraft/mc-mods/jumploader>
[url-credits-comp500-Indium]: <https://modrinth.com/mod/indium>
[url-credits-comp500-packwiz]: <https://github.com/comp500/packwiz>
[url-credits-jellysquid3]: <https://github.com/jellysquid3>
[url-credits-jellysquid3-lithium]: <https://curseforge.com/minecraft/mc-mods/lithium>
[url-credits-jellysquid3-phosphor]: <https://curseforge.com/minecraft/mc-mods/phosphor>
[url-credits-jellysquid3-sodium]: <https://curseforge.com/minecraft/mc-mods/sodium>
[url-credits-Kichura]: <https://github.com/Kichura>
[url-credits-LambdAurora]: <https://github.com/LambdAurora>
[url-credits-LambdAurora-alternatives]: <https://lambdaurora.dev/optifine_alternatives>
[url-credits-LambdAurora-LambDynamicLights]: <https://curseforge.com/minecraft/mc-mods/lambdynamiclights>
[url-credits-RaptaG]: <https://github.com/RaptaG>
[url-credits-IMB11]: <https://github.com/IMB11>
[url-credits-Miroma]: <https://github.com/its-miroma>
[url-credits-redbrain]: <https://github.com/redbrain>
[url-credits-RozeFound]: <https://github.com/RozeFound>
[url-credits-TheMadHau5]: <https://github.com/themadhau5>
[url-credits-TheYTG123]: <https://curseforge.com/members/theytg123/projects>
[url-credits-triphora]: <https://github.com/triphora>
[url-credits-Ultrasonic1209]: <https://github.com/Ultrasonic1209>
[url-discord]: <https://download.fo/discord>
[url-github]: <https://download.fo/github>
[url-github-main-graph]: <https://github.com/Fabulously-Optimized/fabulously-optimized/graphs/contributors>
[url-github-wiki-graph]: <https://github.com/Fabulously-Optimized/wiki/graphs/contributors>
[url-github-org]: <https://github.com/Fabulously-Optimized>
[url-install]: <https://download.fo/install>
[url-mastodon]: <https://download.fo/mastodon>
[url-modrinth]: <https://download.fo/modrinth>
[url-options]: <https://wiki.download.fo/readme/changed-options>
[url-rate]: <https://download.fo/rate>
[url-rp]: <https://wiki.download.fo/readme/changed-options#resource-packs>
[url-rp-crh-cf]: <https://curseforge.com/minecraft/texture-packs/chat-reporting-helper>
[url-rp-crh-modrinth]: <https://modrinth.com/resourcepack/chat-reporting-helper>
[url-rp-crh-pmc]: <https://planetminecraft.com/texture-pack/chat-reporting-helper>
[url-rp-fbg-cf]: <https://curseforge.com/minecraft/texture-packs/fast-better-grass>
[url-rp-fbg-modrinth]: <https://modrinth.com/resourcepack/fast-better-grass>
[url-rp-fbg-pmc]: <https://planetminecraft.com/texture-pack/fast-better-grass>
[url-terms]: <https://download.fo/terms>
[url-contribute]: <https://download.fo/contribute>
[url-translate]: <https://download.fo/translate>
[url-tutorial-cf]: <https://wiki.download.fo/readme/install-instructions#curseforge-app>
[url-tutorial-mmcu]: <https://wiki.download.fo/readme/install-instructions#multimc-auto-update>
[url-tutorial-mmcu-ignoremods]: <https://wiki.download.fo/readme/multimc-auto-update#can-i-ignore-some-of-the-mods>
[url-tutorial-modrinth]: <https://wiki.download.fo/readme/install-instructions#modrinth-app>
[url-tutorial-multimc]: <https://wiki.download.fo/readme/install-instructions#multimc>
[url-tutorial-prism]: <https://wiki.download.fo/readme/install-instructions#prism-launcher>
[url-tutorial-vanilla]: <https://wiki.download.fo/readme/install-instructions#minecraft-launcher-vanilla>
[url-website]: <https://download.fo>
[url-wiki]: <https://download.fo/wiki>


     English | 简体中文

A Deep Learning Based Knowledge Extraction Toolkit
for Knowledge Graph Construction

[DeepKE](https://arxiv.org/pdf/2201.03335.pdf) is a knowledge extraction toolkit for knowledge graph construction supporting **cnSchema**，**low-resource**, **document-level** and **multimodal** scenarios for *entity*, *relation* and *attribute* extraction. We provide [documents](https://zjunlp.github.io/DeepKE/), [online demo](http://deepke.zjukg.cn/), [paper](https://arxiv.org/pdf/2201.03335.pdf), [slides](https://drive.google.com/file/d/1IIeIZAbVduemqXc4zD40FUMoPHCJinLy/view?usp=sharing) and [poster](https://drive.google.com/file/d/1vd7xVHlWzoAxivN4T5qKrcqIGDcSM1_7/view?usp=sharing) for beginners.

- ❗Want to use **Large Language Models** with DeepKE? Try [DeepKE-LLM](https://github.com/zjunlp/DeepKE/tree/main/example/llm) and [OneKE](https://github.com/zjunlp/DeepKE/blob/main/example/llm/OneKE.md), have fun!
- ❗Want to train supervised models? Try [Quick Start](#quick-start), we provide the NER models (e.g, [LightNER(COLING'22)](https://github.com/zjunlp/DeepKE/tree/main/example/ner/few-shot), [W2NER(AAAI'22)](https://github.com/zjunlp/DeepKE/tree/main/example/ner/standard/w2ner)), relation extraction models (e.g., [KnowPrompt(WWW'22)](https://github.com/zjunlp/DeepKE/tree/main/example/re/few-shot)), relational triple extraction models (e.g., [ASP(EMNLP'22)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/ASP), [PRGC(ACL'21)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/PRGC), [PURE(NAACL'21)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/PURE)), and release off-the-shelf  models at [DeepKE-cnSchema](https://github.com/zjunlp/DeepKE/tree/main/example/triple/cnschema), have fun!
- We recommend using Linux; if using Windows, please use `\\` in file paths;
- If HuggingFace is inaccessible, please consider using `wisemodel` or `modescape`.

**If you encounter any issues during the installation of DeepKE and DeepKE-LLM, please check [Tips](https://github.com/zjunlp/DeepKE#tips) or promptly submit an [issue](https://github.com/zjunlp/DeepKE/issues), and we will assist you with resolving the problem!**

# Table of Contents

- [Table of Contents](#table-of-contents)
- [What's New](#whats-new)
- [Prediction Demo](#prediction-demo)
- [Model Framework](#model-framework)
- [Quick Start](#quick-start)
  - [DeepKE-LLM](#deepke-llm)
  - [DeepKE](#deepke)
      - [🔧Manual Environment Configuration](#manual-environment-configuration)
      - [🐳Building With Docker Images](#building-with-docker-images)
  - [Requirements](#requirements)
    - [DeepKE](#deepke-1)
  - [Introduction of Three Functions](#introduction-of-three-functions)
    - [1. Named Entity Recognition](#1-named-entity-recognition)
    - [2. Relation Extraction](#2-relation-extraction)
    - [3. Attribute Extraction](#3-attribute-extraction)
    - [4. Event Extraction](#4-event-extraction)
- [Tips](#tips)
- [To do](#to-do)
- [Reading Materials](#reading-materials)
- [Related Toolkit](#related-toolkit)
- [Citation](#citation)
- [Contributors](#contributors)
- [Other Knowledge Extraction Open-Source Projects](#other-knowledge-extraction-open-source-projects)

# What's New

* `April, 2024` We release a new bilingual (Chinese and English) schema-based information extraction model called [OneKE](https://huggingface.co/zjunlp/OneKE) based on Chinese-Alpaca-2-13B.
* `Feb, 2024` We release a large-scale (0.32B tokens) high-quality bilingual (Chinese and English) Information Extraction (IE) instruction dataset named [IEPile](https://huggingface.co/datasets/zjunlp/iepie), along with two models trained with `IEPile`, [baichuan2-13b-iepile-lora](https://huggingface.co/zjunlp/baichuan2-13b-iepile-lora) and [llama2-13b-iepile-lora](https://huggingface.co/zjunlp/llama2-13b-iepile-lora).
* `Sep 2023` a bilingual Chinese English Information Extraction (IE) instruction dataset called  `InstructIE` was released for the Instruction based Knowledge Graph Construction Task (Instruction based KGC), as detailed in [here](./example/llm/README.md/#data).
* `June, 2023` We update [DeepKE-LLM](https://github.com/zjunlp/DeepKE/tree/main/example/llm) to support **knowledge extraction** with [KnowLM](https://github.com/zjunlp/KnowLM), [ChatGLM](https://github.com/THUDM/ChatGLM-6B), LLaMA-series, GPT-series etc.
* `Apr, 2023` We have added new models, including [CP-NER(IJCAI'23)](https://github.com/zjunlp/DeepKE/blob/main/example/ner/cross), [ASP(EMNLP'22)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/ASP), [PRGC(ACL'21)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/PRGC), [PURE(NAACL'21)](https://github.com/zjunlp/DeepKE/tree/main/example/triple/PURE), provided [event extraction](https://github.com/zjunlp/DeepKE/tree/main/example/ee/standard) capabilities (Chinese and English), and offered compatibility with higher versions of Python packages (e.g., Transformers).
* `Feb, 2023` We have supported using [LLM](https://github.com/zjunlp/DeepKE/tree/main/example/llm) (GPT-3) with in-context learning (based on [EasyInstruct](https://github.com/zjunlp/EasyInstruct)) & data generation, added a NER model [W2NER(AAAI'22)](https://github.com/zjunlp/DeepKE/tree/main/example/ner/standard/w2ner).

Previous News

* `Nov, 2022` Add data [annotation instructions](https://github.com/zjunlp/DeepKE/blob/main/README_TAG.md) for entity recognition and relation extraction, automatic labelling of weakly supervised data ([entity extraction](https://github.com/zjunlp/DeepKE/tree/main/example/ner/prepare-data) and [relation extraction](https://github.com/zjunlp/DeepKE/tree/main/example/re/prepare-data)), and optimize [multi-GPU training](https://github.com/zjunlp/DeepKE/tree/main/example/re/standard).

* `Sept, 2022` The paper [DeepKE: A Deep Learning Based Knowledge Extraction Toolkit for Knowledge Base Population](https://arxiv.org/abs/2201.03335) has been accepted by the EMNLP 2022 System Demonstration Track.

* `Aug, 2022` We have added [data augmentation](https://github.com/zjunlp/DeepKE/tree/main/example/re/few-shot/DA) (Chinese, English) support for [low-resource relation extraction](https://github.com/zjunlp/DeepKE/tree/main/example/re/few-shot).

* `June, 2022` We have added multimodal support for [entity](https://github.com/zjunlp/DeepKE/tree/main/example/ner/multimodal) and [relation extraction](https://github.com/zjunlp/DeepKE/tree/main/example/re/multimodal).

* `May, 2022` We have released [DeepKE-cnschema](https://github.com/zjunlp/DeepKE/blob/main/README_CNSCHEMA.md) with off-the-shelf knowledge extraction models.

* `Jan, 2022` We have released a paper [DeepKE: A Deep Learning Based Knowledge Extraction Toolkit for Knowledge Base Population](https://arxiv.org/abs/2201.03335)

* `Dec, 2021` We have added `dockerfile` to create the enviroment automatically.

* `Nov, 2021` The demo of DeepKE, supporting real-time extration without deploying and training, has been released.
* The documentation of DeepKE, containing the details of DeepKE such as source codes and datasets, has been released.

* `Oct, 2021` `pip install deepke`
* The codes of deepke-v2.0 have been released.

* `Aug, 2019` The codes of deepke-v1.0 have been released.

* `Aug, 2018` The project DeepKE startup and codes of deepke-v0.1 have been released.

# Prediction Demo

There is a demonstration of prediction. The GIF file is created by [Terminalizer](https://github.com/faressoft/terminalizer). Get the [code](https://drive.google.com/file/d/1r4tWfAkpvynH3CBSgd-XG79rf-pB-KR3/view?usp=share_link).

# Model Framework

- DeepKE contains a unified framework for **named entity recognition**, **relation extraction** and **attribute extraction**, the three  knowledge extraction functions.
- Each task can be implemented in different scenarios. For example, we can achieve relation extraction in **standard**, **low-resource (few-shot)**, **document-level** and **multimodal** settings.
- Each application scenario comprises of three components: **Data** including Tokenizer, Preprocessor and Loader, **Model** including Module, Encoder and Forwarder, **Core** including Training, Evaluation and Prediction.

# Quick Start

## DeepKE-LLM

In the era of large models, DeepKE-LLM utilizes a completely new environment dependency.

```
conda create -n deepke-llm python=3.9
conda activate deepke-llm

cd example/llm
pip install -r requirements.txt
```

Please note that the `requirements.txt` file is located in the `example/llm` folder.

## DeepKE
- *DeepKE* supports `pip install deepke`.
Take the fully supervised relation extraction for example.
- *DeepKE* supports both **manual** and **docker image** environment configuration, you can choose the appropriate way to build.
- Highly recommended to install deepke in a Linux environment.
#### 🔧Manual Environment Configuration

**Step1** Download the basic code

```bash
git clone --depth 1 https://github.com/zjunlp/DeepKE.git
```

**Step2** Create a virtual environment using `Anaconda` and enter it.

```bash
conda create -n deepke python=3.8

conda activate deepke
```

1. Install *DeepKE* with source code

   ```bash
   pip install -r requirements.txt

   python setup.py install

   python setup.py develop
   ```

2. Install *DeepKE* with `pip` (**NOT recommended!**)

   ```bash
   pip install deepke
   ```

**Step3** Enter the task directory

```bash
cd DeepKE/example/re/standard
```

**Step4** Download the dataset, or follow the [annotation instructions](https://github.com/zjunlp/DeepKE/blob/main/README_TAG.md) to obtain data

```bash
wget 120.27.214.45/Data/re/standard/data.tar.gz

tar -xzvf data.tar.gz
```

Many types of data formats are supported,and details are in each part.

**Step5** Training (Parameters for training can be changed in the `conf` folder)

We support visual parameter tuning by using *[wandb](https://docs.wandb.ai/quickstart)*.

```bash
python run.py
```

**Step6** Prediction (Parameters for prediction can be changed in the `conf` folder)

Modify the path of the trained model in `predict.yaml`.The absolute path of the model needs to be used，such as `xxx/checkpoints/2019-12-03_ 17-35-30/cnn_ epoch21.pth`.

```bash
python predict.py
```

 - **❗NOTE: if you encounter any errors, please refer to the [Tips](#tips) or submit a GitHub issue.**

#### 🐳Building With Docker Images
**Step1** Install the Docker client

Install Docker and start the Docker service.

**Step2** Pull the docker image and run the container

```bash
docker pull zjunlp/deepke:latest
docker run -it zjunlp/deepke:latest /bin/bash
```

The remaining steps are the same as **Step 3 and onwards** in **Manual Environment Configuration**.

 - **❗NOTE: You can refer to the [Tips](#tips) to speed up installation**

## Requirements

### DeepKE
> python == 3.8

- torch>=1.5,<=1.11
- hydra-core==1.0.6
- tensorboard==2.4.1
- matplotlib==3.4.1
- transformers==4.26.0
- jieba==0.42.1
- scikit-learn==0.24.1
- seqeval==1.2.2
- opt-einsum==3.3.0
- wandb==0.12.7
- ujson==5.6.0
- huggingface_hub==0.11.0
- tensorboardX==2.5.1
- nltk==3.8
- protobuf==3.20.1
- numpy==1.21.0
- ipdb==0.13.11
- pytorch-crf==0.7.2
- tqdm==4.66.1
- openai==0.28.0
- Jinja2==3.1.2
- datasets==2.13.2
- pyhocon==0.3.60

## Introduction of Three Functions

### 1. Named Entity Recognition

- Named entity recognition seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, organizations, etc.

- The data is stored in `.txt` files. Some instances as following (Users can label data based on the tools [Doccano](https://github.com/doccano/doccano), [MarkTool](https://github.com/FXLP/MarkTool), or they can use the [Weak Supervision](https://github.com/zjunlp/DeepKE/blob/main/example/ner/prepare-data) with DeepKE to obtain data automatically):

  |                           Sentence                           |           Person           |    Location    |          Organization          |
  | :----------------------------------------------------------: | :------------------------: | :------------: | :----------------------------: |
  | 本报北京9月4日讯记者杨涌报道：部分省区人民日报宣传发行工作座谈会9月3日在4日在京举行。 |            杨涌            |      北京      |            人民日报            |
  | 《红楼梦》由王扶林导演，周汝昌、王蒙、周岭等多位专家参与制作。 | 王扶林，周汝昌，王蒙，周岭 |            |  |
  | 秦始皇兵马俑位于陕西省西安市,是世界八大奇迹之一。 |           秦始皇           | 陕西省，西安市 |                          |

- Read the detailed process in specific README
  - **[STANDARD (Fully Supervised)](https://github.com/zjunlp/DeepKE/tree/main/example/ner/standard)**

    ***We [support LLM](https://github.com/zjunlp/DeepKE/tree/main/example/llm) and provide the off-the-shelf model, [DeepKE-cnSchema-NER](https://github.com/zjunlp/DeepKE/blob/main/README_CNSCHEMA_CN.md), which will extract entities in cnSchema without training.***

    **Step1** Enter  `DeepKE/example/ner/standard`.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/ner/standard/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step2** Training

    The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

  - **[FEW-SHOT](https://github.com/zjunlp/DeepKE/tree/main/example/ner/few-shot)**

    **Step1** Enter  `DeepKE/example/ner/few-shot`.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/ner/few_shot/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step2** Training in the low-resouce setting

    The directory where the model is loaded and saved and the configuration parameters can be cusomized in the `conf` folder.

    ```bash
    python run.py +train=few_shot
    ```

    Users can modify `load_path` in `conf/train/few_shot.yaml` to use existing loaded model.

    **Step3** Add `- predict` to `conf/config.yaml`, modify `loda_path` as the model path and `write_path` as the path where the predicted results are saved in `conf/predict.yaml`, and then run `python predict.py`

    ```bash
    python predict.py
    ```

  - **[MULTIMODAL](https://github.com/zjunlp/DeepKE/tree/main/example/ner/multimodal)**

    **Step1** Enter  `DeepKE/example/ner/multimodal`.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/ner/multimodal/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    We use RCNN detected objects and visual grounding objects from original images as visual local information, where RCNN via [faster_rcnn](https://github.com/pytorch/vision/blob/main/torchvision/models/detection/faster_rcnn.py) and visual grounding via [onestage_grounding](https://github.com/zyang-ur/onestage_grounding).

    **Step2** Training in the multimodal setting

    - The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.
    - Start with the model trained last time: modify `load_path` in `conf/train.yaml`as the path where the model trained last time was saved. And the path saving logs generated in training can be customized by `log_dir`.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

### 2. Relation Extraction

- Relationship extraction is the task of extracting semantic relations between entities from a unstructured text.

- The data is stored in `.csv` files. Some instances as following (Users can label data based on the tools [Doccano](https://github.com/doccano/doccano), [MarkTool](https://github.com/FXLP/MarkTool), or they can use the [Weak Supervision](https://github.com/zjunlp/DeepKE/blob/main/example/re/prepare-data) with DeepKE to obtain data automatically):

  |                        Sentence                        | Relation |    Head    | Head_offset |    Tail    | Tail_offset |
  | :----------------------------------------------------: | :------: | :--------: | :---------: | :--------: | :---------: |
  | 《岳父也是爹》是王军执导的电视剧，由马恩然、范明主演。 |   导演   | 岳父也是爹 |      1      |    王军    |      8      |
  |  《九玄珠》是在纵横中文网连载的一部小说，作者是龙马。  | 连载网站 |   九玄珠   |      1      | 纵横中文网 |      7      |
  |     提起杭州的美景，西湖总是第一个映入脑海的词语。     | 所在城市 |    西湖    |      8      |    杭州    |      2      |

- **!NOTE: If there are multiple entity types for one relation, entity types can be prefixed with the relation as inputs.**
- Read the detailed process in specific README

  - **[STANDARD (Fully Supervised)](https://github.com/zjunlp/DeepKE/tree/main/example/re/standard)**

    ***We [support LLM](https://github.com/zjunlp/DeepKE/tree/main/example/llm) and provide the off-the-shelf model, [DeepKE-cnSchema-RE](https://github.com/zjunlp/DeepKE/blob/main/README_CNSCHEMA_CN.md), which will extract relations in cnSchema without training.***

    **Step1** Enter the `DeepKE/example/re/standard` folder.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/re/standard/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step2** Training

    The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

  - **[FEW-SHOT](https://github.com/zjunlp/DeepKE/tree/main/example/re/few-shot)**

    **Step1** Enter `DeepKE/example/re/few-shot`. Download the dataset.

    ```bash
    wget 120.27.214.45/Data/re/few_shot/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step 2** Training

    - The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.
    - Start with the model trained last time: modify `train_from_saved_model` in `conf/train.yaml`as the path where the model trained last time was saved. And the path saving logs generated in training can be customized by `log_dir`.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

  - **[DOCUMENT](https://github.com/zjunlp/DeepKE/tree/main/example/re/document)**

    **Step1** Enter `DeepKE/example/re/document`.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/re/document/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step2** Training

    - The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.
    - Start with the model trained last time: modify `train_from_saved_model` in `conf/train.yaml`as the path where the model trained last time was saved. And the path saving logs generated in training can be customized by `log_dir`.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

  - **[MULTIMODAL](https://github.com/zjunlp/DeepKE/tree/main/example/re/multimodal)**

    **Step1** Enter  `DeepKE/example/re/multimodal`.  Download the dataset.

    ```bash
    wget 120.27.214.45/Data/re/multimodal/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    We use RCNN detected objects and visual grounding objects from original images as visual local information, where RCNN via [faster_rcnn](https://github.com/pytorch/vision/blob/main/torchvision/models/detection/faster_rcnn.py) and visual grounding via [onestage_grounding](https://github.com/zyang-ur/onestage_grounding).

    **Step2** Training

    - The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.
    - Start with the model trained last time: modify `load_path` in `conf/train.yaml`as the path where the model trained last time was saved. And the path saving logs generated in training can be customized by `log_dir`.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

### 3. Attribute Extraction

- Attribute extraction is to extract attributes for entities in a unstructed text.

- The data is stored in `.csv` files. Some instances as following:

  |                           Sentence                           |   Att    |   Ent    | Ent_offset |      Val      | Val_offset |
  | :----------------------------------------------------------: | :------: | :------: | :--------: | :-----------: | :--------: |
  |          张冬梅，女，汉族，1968年2月生，河南淇县人           |   民族   |  张冬梅  |     0      |     汉族      |     6      |
  |诸葛亮，字孔明，三国时期杰出的军事家、文学家、发明家。|   朝代   |   诸葛亮   |     0      |     三国时期      |     8     |
  |        2014年10月1日许鞍华执导的电影《黄金时代》上映         | 上映时间 | 黄金时代 |     19     | 2014年10月1日 |     0      |

- Read the detailed process in specific README
  - **[STANDARD (Fully Supervised)](https://github.com/zjunlp/DeepKE/tree/main/example/ae/standard)**

    **Step1** Enter the `DeepKE/example/ae/standard` folder. Download the dataset.

    ```bash
    wget 120.27.214.45/Data/ae/standard/data.tar.gz

    tar -xzvf data.tar.gz
    ```

    **Step2** Training

    The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.

    ```bash
    python run.py
    ```

    **Step3** Prediction

    ```bash
    python predict.py
    ```

### 4. Event Extraction

* Event extraction is the task to extract event type, event trigger words, event arguments from a unstructed text.
* The data is stored in `.tsv` files, some instances are as follows:

         Sentence
         Event type
         Trigger
         Role
         Argument

         据《欧洲时报》报道，当地时间27日，法国巴黎卢浮宫博物馆员工因不满工作条件恶化而罢工，导致该博物馆也因此闭门谢客一天。
      	 组织行为-罢工
    		 罢工
    		 罢工人员
    		 法国巴黎卢浮宫博物馆员工

         时间
         当地时间27日

         所属组织
         法国巴黎卢浮宫博物馆

         中国外运2019年上半年归母净利润增长17%：收购了少数股东股权
      	 财经/交易-出售/收购
    		 收购
    		 出售方
    		 少数股东

         收购方
         中国外运

         交易物
         股权

         美国亚特兰大航展13日发生一起表演机坠机事故，飞行员弹射出舱并安全着陆，事故没有造成人员伤亡。
      	 灾害/意外-坠机
    		 坠机
    		 时间
    		 13日

         地点
         美国亚特兰

* Read the detailed process in specific README

  * [STANDARD(Fully Supervised)](./example/ee/standard/README.md)

    **Step1** Enter the `DeepKE/example/ee/standard` folder. Download the dataset.

    ```bash
    wget 120.27.214.45/Data/ee/DuEE.zip
    unzip DuEE.zip
    ```

    **Step 2** Training

    The dataset and parameters can be customized in the `data` folder and `conf` folder respectively.

    ```bash
    python run.py
    ```

    **Step 3** Prediction

    ```bash
    python predict.py
    ```

# Tips

1.```Using nearest mirror```, **[THU](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/) in China, will speed up the installation of *Anaconda*; [aliyun](http://mirrors.aliyun.com/pypi/simple/) in China, will speed up `pip install XXX`**.

2.When encountering `ModuleNotFoundError: No module named 'past'`，run `pip install future` .

3.It's slow to install the pretrained language models online. Recommend download pretrained models before use and save them in the `pretrained` folder. Read `README.md` in every task directory to check the specific requirement for saving pretrained models.

4.The old version of *DeepKE* is in the [deepke-v1.0](https://github.com/zjunlp/DeepKE/tree/deepke-v1.0) branch. Users can change the branch to use the old version. The old version has been totally transfered to the standard relation extraction ([example/re/standard](https://github.com/zjunlp/DeepKE/blob/main/example/re/standard/README.md)).

5.If you want to modify the source code, it's recommended to install *DeepKE* with source codes. If not, the modification will not work. See [issue](https://github.com/zjunlp/DeepKE/issues/117)

6.More related low-resource knowledge extraction  works can be found in [Knowledge Extraction in Low-Resource Scenarios: Survey and Perspective](https://arxiv.org/pdf/2202.08063.pdf).

7.Make sure the exact versions of requirements in `requirements.txt`.

# To do
In next version, we plan to release a stronger LLM for KE.

Meanwhile, we will offer long-term maintenance to **fix bugs**, **solve issues** and meet **new requests**. So if you have any problems, please put issues to us.

# Reading Materials

Data-Efficient Knowledge Graph Construction, 高效知识图谱构建 ([Tutorial on CCKS 2022](http://sigkg.cn/ccks2022/?page_id=24)) \[[slides](https://drive.google.com/drive/folders/1xqeREw3dSiw-Y1rxLDx77r0hGUvHnuuE)\]

Efficient and Robust Knowledge Graph Construction ([Tutorial on AACL-IJCNLP 2022](https://www.aacl2022.org/Program/tutorials)) \[[slides](https://github.com/NLP-Tutorials/AACL-IJCNLP2022-KGC-Tutorial)\]

PromptKG Family: a Gallery of Prompt Learning & KG-related Research Works, Toolkits, and Paper-list [[Resources](https://github.com/zjunlp/PromptKG)\]

Knowledge Extraction in Low-Resource Scenarios: Survey and Perspective \[[Survey](https://arxiv.org/abs/2202.08063)\]\[[Paper-list](https://github.com/zjunlp/Low-resource-KEPapers)\]

# Related Toolkit

[Doccano](https://github.com/doccano/doccano)、[MarkTool](https://github.com/FXLP/MarkTool)、[LabelStudio](https://labelstud.io/ ): Data Annotation Toolkits

[LambdaKG](https://github.com/zjunlp/PromptKG/tree/main/lambdaKG): A library and benchmark for PLM-based KG embeddings

[EasyInstruct](https://github.com/zjunlp/EasyInstruct): An easy-to-use framework to instruct Large Language Models

**Reading Materials**:

Data-Efficient Knowledge Graph Construction, 高效知识图谱构建 ([Tutorial on CCKS 2022](http://sigkg.cn/ccks2022/?page_id=24)) \[[slides](https://drive.google.com/drive/folders/1xqeREw3dSiw-Y1rxLDx77r0hGUvHnuuE)\]

Efficient and Robust Knowledge Graph Construction ([Tutorial on AACL-IJCNLP 2022](https://www.aacl2022.org/Program/tutorials)) \[[slides](https://github.com/NLP-Tutorials/AACL-IJCNLP2022-KGC-Tutorial)\]

PromptKG Family: a Gallery of Prompt Learning & KG-related Research Works, Toolkits, and Paper-list [[Resources](https://github.com/zjunlp/PromptKG)\]

Knowledge Extraction in Low-Resource Scenarios: Survey and Perspective \[[Survey](https://arxiv.org/abs/2202.08063)\]\[[Paper-list](https://github.com/zjunlp/Low-resource-KEPapers)\]

**Related Toolkit**:

[Doccano](https://github.com/doccano/doccano)、[MarkTool](https://github.com/FXLP/MarkTool)、[LabelStudio](https://labelstud.io/ ): Data Annotation Toolkits

[LambdaKG](https://github.com/zjunlp/PromptKG/tree/main/lambdaKG): A library and benchmark for PLM-based KG embeddings

[EasyInstruct](https://github.com/zjunlp/EasyInstruct): An easy-to-use framework to instruct Large Language Models

# Citation

Please cite our paper if you use DeepKE in your work

```bibtex
@inproceedings{EMNLP2022_Demo_DeepKE,
  author    = {Ningyu Zhang and
               Xin Xu and
               Liankuan Tao and
               Haiyang Yu and
               Hongbin Ye and
               Shuofei Qiao and
               Xin Xie and
               Xiang Chen and
               Zhoubo Li and
               Lei Li},
  editor    = {Wanxiang Che and
               Ekaterina Shutova},
  title     = {DeepKE: {A} Deep Learning Based Knowledge Extraction Toolkit for Knowledge Base Population},
  booktitle = {{EMNLP} (Demos)},
  pages     = {98--108},
  publisher = {Association for Computational Linguistics},
  year      = {2022},
  url       = {https://aclanthology.org/2022.emnlp-demos.10}
}
```

# Contributors

[Ningyu Zhang](https://person.zju.edu.cn/en/ningyu), [Haofen Wang](https://tjdi.tongji.edu.cn/TeacherDetail.do?id=4991&lang=_en), Fei Huang, Feiyu Xiong, Liankuan Tao, Xin Xu, Honghao Gui,  Zhenru Zhang, Chuanqi Tan, Qiang Chen, Xiaohan Wang, Zekun Xi, Xinrong Li, Haiyang Yu, Hongbin Ye, Shuofei Qiao, Peng Wang, Yuqi Zhu, Xin Xie, Xiang Chen, Zhoubo Li, Lei Li, Xiaozhuan Liang, Yunzhi Yao, Jing Chen, Yuqi Zhu, Shumin Deng, Wen Zhang, Guozhou Zheng, Huajun Chen

Community Contributors: [thredreams](https://github.com/thredreams), [eltociear](https://github.com/eltociear), Ziwen Xu, Rui Huang, Xiaolong Weng

# Other Knowledge Extraction Open-Source Projects

- [CogIE](https://github.com/jinzhuoran/CogIE)
- [OpenNRE](https://github.com/thunlp/OpenNRE)
- [OmniEvent](https://github.com/THU-KEG/OmniEvent)
- [OpenUE](https://github.com/zjunlp/OpenUE)
- [OpenIE](https://stanfordnlp.github.io/CoreNLP/openie.html)
- [RESIN](https://github.com/RESIN-KAIROS/RESIN-pipeline-public)
- [ZShot](https://github.com/IBM/zshot)
- [ZS4IE](https://github.com/BBN-E/ZS4IE)
- [OmniEvent](https://github.com/THU-KEG/OmniEvent)


# Berkeleytime

## Background

A course discovery and planning tool which combines all of UC Berkeley's academic information in one place. We intend to make it a more accurate and powerful tool than anything students currently use.

Berkeleytime was created by [Yuxin Zhu](http://yuxinzhu.com/) and [Noah Gilmore](https://noahgilmore.com) and is maintained by [the ASUC Office of the CTO](https://octo.asuc.org/).

## Development

Much of the current development is on [the node branch](https://github.com/asuc-octo/berkeleytime/tree/node).

It hasn't been updated recently, but this project does have [a wiki](https://github.com/asuc-octo/berkeleytime/wiki).


|github-actions| |coverage| |nala|

About
=====

CAN BUS tools in Python 3.

- `DBC`_, `KCD`_, SYM, ARXML 3&4 and CDD file parsing.

- CAN message encoding and decoding.

- Simple and extended signal multiplexing.

- Diagnostic DID encoding and decoding.

- ``candump`` output decoder.

- Node `tester`_.

- `C` source code generator.

- CAN bus monitor.

- Graphical plots of signals.

Project homepage: https://github.com/cantools/cantools

Documentation: https://cantools.readthedocs.io

Installation
============

.. code-block:: bash

    python3 -m pip install cantools

Example usage
=============

Scripting
---------

The example starts by parsing a `small DBC-file`_ and printing its
messages and signals.

.. code-block:: python

   >>> import cantools
   >>> from pprint import pprint
   >>> db = cantools.database.load_file('tests/files/dbc/motohawk.dbc')
   >>> db.messages
   [message('ExampleMessage', 0x1f0, False, 8, 'Example message used as template in MotoHawk models.')]
   >>> example_message = db.get_message_by_name('ExampleMessage')
   >>> pprint(example_message.signals)
   [signal('Enable', 7, 1, 'big_endian', False, 1.0, 0, 0.0, 0.0, '-', False, None, {0: 'Disabled', 1: 'Enabled'}, None),
    signal('AverageRadius', 6, 6, 'big_endian', False, 0.1, 0, 0.0, 5.0, 'm', False, None, None, ''),
    signal('Temperature', 0, 12, 'big_endian', True, 0.01, 250, 229.53, 270.47, 'degK', False, None, None, None)]

The example continues `encoding`_ a message and sending it on a CAN
bus using the `python-can`_ package.

.. code-block:: python

   >>> import can
   >>> can_bus = can.interface.Bus('vcan0', bustype='socketcan')
   >>> data = example_message.encode({'Temperature': 250.1, 'AverageRadius': 3.2, 'Enable': 1})
   >>> message = can.Message(arbitration_id=example_message.frame_id, data=data)
   >>> can_bus.send(message)

Alternatively, a message can be encoded using the `encode_message()`_
method on the database object.

The last part of the example receives and `decodes`_ a CAN message.

.. code-block:: python

   >>> message = can_bus.recv()
   >>> db.decode_message(message.arbitration_id, message.data)
   {'AverageRadius': 3.2, 'Enable': 'Enabled', 'Temperature': 250.09}

See `examples`_ for additional examples.

Command line tool
-----------------

The decode subcommand
^^^^^^^^^^^^^^^^^^^^^

Decode CAN frames captured with the Linux program ``candump``.

.. code-block:: text

   $ candump vcan0 | python3 -m cantools decode tests/files/dbc/motohawk.dbc
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 ::
   ExampleMessage(
       Enable: 'Enabled' -,
       AverageRadius: 0.0 m,
       Temperature: 255.92 degK
   )
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 ::
   ExampleMessage(
       Enable: 'Enabled' -,
       AverageRadius: 0.0 m,
       Temperature: 255.92 degK
   )
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 ::
   ExampleMessage(
       Enable: 'Enabled' -,
       AverageRadius: 0.0 m,
       Temperature: 255.92 degK
   )

Alternatively, the decoded message can be printed on a single line:

.. code-block:: text

   $ candump vcan0 | python3 -m cantools decode --single-line tests/files/dbc/motohawk.dbc
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK)
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK)
     vcan0  1F0   [8]  80 4A 0F 00 00 00 00 00 :: ExampleMessage(Enable: 'Enabled' -, AverageRadius: 0.0 m, Temperature: 255.92 degK)

The plot subcommand
^^^^^^^^^^^^^^^^^^^

The plot subcommand is similar to the decode subcommand but messages are visualized using `matplotlib`_ instead of being printed to stdout.

.. code-block:: bash

    $ candump -l vcan0
    $ cat candump-2021-01-04_180521.log
    (1609779922.655421) vcan0 00000343#B204B9049C049C04
    (1609779922.655735) vcan0 0000024A#120527052E051905
    (1609779923.657524) vcan0 00000343#C404C404CB04C404
    (1609779923.658086) vcan0 0000024A#8B058B058B059205
    (1609779924.659912) vcan0 00000343#5C04790479045504
    (1609779924.660471) vcan0 0000024A#44064B0659064406
    (1609779925.662277) vcan0 00000343#15040704F203F203
    (1609779925.662837) vcan0 0000024A#8B069906A706A706
    (1609779926.664191) vcan0 00000343#BC03B503A703BC03
    (1609779926.664751) vcan0 0000024A#A006A706C406C406

    $ cat candump-2021-01-04_180521.log | python3 -m cantools plot tests/files/dbc/abs.dbc

.. image:: https://github.com/cantools/cantools/raw/master/docs/plot-1.png

If you don't want to show all signals you can select the desired signals with command line arguments.
A ``*`` can stand for any number of any character, a ``?`` for exactly one arbitrary character.
Signals separated by a ``-`` are displayed in separate subplots.
Optionally a format can be specified after a signal, separated by a colon.

.. code-block:: bash

    $ cat candump-2021-01-04_180521.log | python3 -m cantools plot tests/files/dbc/abs.dbc '*33.*fl:-<' '*33.*fr:->' - '*33.*rl:-<' '*33.*rr:->'

.. image:: https://github.com/cantools/cantools/raw/master/docs/plot-2-subplots.png

Signals with a different range of values can be displayed in the same subplot on different vertical axes by separating them with a comma.

.. code-block:: bash

   $ cat candump-2021-01-04_180521.log | cantools plot --auto-color tests/files/dbc/abs.dbc -- \
      --ylabel 'Bremse 33' '*_33.*fl*:-<' '*_33.*fr*:>' '*_33.*rl*:3' '*_33.*rr*:4' , \
      --ylabel 'Bremse 2' '*_2.*fl*:-<' '*_2.*fr*:>' '*_2.*rl*:3' '*_2.*rr*:4'

.. image:: https://github.com/cantools/cantools/raw/master/docs/plot-2-axes.png

Matplotlib comes with different preinstalled styles that you can use:

.. code-block:: bash

   $ cat candump-2021-01-04_180521.log | cantools plot tests/files/dbc/abs.dbc --style seaborn

.. image:: https://github.com/cantools/cantools/raw/master/docs/plot-seaborn.png

You can try all available styles with

.. code-block:: bash

   $ cantools plot --list-styles . | sed -n '/^- /s/^- //p' | while IFS= read -r style; do
         cat candump-2021-01-04_180521.log | cantools plot tests/files/dbc/abs.dbc --style "$style" --title "--style '$style'"
     done

For more information see

.. code-block:: bash

    $ python3 -m cantools plot --help

Note that by default matplotlib is not installed with cantools. But it can be by specifying an extra
at installation:

.. code-block:: bash

    $ python3 -m pip install cantools[plot]

The dump subcommand
^^^^^^^^^^^^^^^^^^^

Dump given database in a human readable format:

.. code-block:: text

   $ python3 -m cantools dump tests/files/dbc/motohawk.dbc
   ================================= Messages =================================

     ------------------------------------------------------------------------

     Name:       ExampleMessage
     Id:         0x1f0
     Length:     8 bytes
     Cycle time: - ms
     Senders:    PCM1
     Layout:

                             Bit

                7   6   5   4   3   2   1   0
              +---+---+---+---+---+---+---+---+
            0 |<-x|<---------------------x|<--|
              +---+---+---+---+---+---+---+---+
                |                       +-- AverageRadius
                +-- Enable
              +---+---+---+---+---+---+---+---+
            1 |-------------------------------|
              +---+---+---+---+---+---+---+---+
            2 |----------x|   |   |   |   |   |
        B     +---+---+---+---+---+---+---+---+
        y               +-- Temperature
        t     +---+---+---+---+---+---+---+---+
        e   3 |   |   |   |   |   |   |   |   |
              +---+---+---+---+---+---+---+---+
            4 |   |   |   |   |   |   |   |   |
              +---+---+---+---+---+---+---+---+
            5 |   |   |   |   |   |   |   |   |
              +---+---+---+---+---+---+---+---+
            6 |   |   |   |   |   |   |   |   |
              +---+---+---+---+---+---+---+---+
            7 |   |   |   |   |   |   |   |   |
              +---+---+---+---+---+---+---+---+

     Signal tree:

       -- {root}
          +-- Enable
          +-- AverageRadius
          +-- Temperature

     Signal choices:

       Enable
           0 Disabled
           1 Enabled

     ------------------------------------------------------------------------

The list subcommand
^^^^^^^^^^^^^^^^^^^

Print all information of a given database in a human readable
format. This is very similar to the "dump" subcommand, but the output
is less pretty, slightly more comprehensive and easier to parse by
shell scripts:

.. code-block:: bash

    $ python3 -m cantools list -a tests/files/dbc/motohawk.dbc
    ExampleMessage:
      Comment[None]: Example message used as template in MotoHawk models.
      Frame ID: 0x1f0 (496)
      Size: 8 bytes
      Is extended frame: False
      Signals:
        Enable:
          Type: Integer
          Start bit: 7
          Length: 1 bits
          Unit: -
          Is signed: False
          Named values:
            0: Disabled

The generate C source subcommand
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Generate `C` source code from given database.

The generated code contains:

- Message `structs`_.

- Message `pack`_ and `unpack`_ functions.

- Signal `encode`_ and `decode`_ functions.

- Frame id, length, type, cycle time and signal choices `defines`_.

Known limitations:

- The maximum signal size is 64 bits, which in practice is never
  exceeded.

Below is an example of how to generate C source code from a
database. The database is ``tests/files/dbc/motohawk.dbc``.

.. code-block:: text

   $ python3 -m cantools generate_c_source tests/files/dbc/motohawk.dbc
   Successfully generated motohawk.h and motohawk.c.

See `motohawk.h`_ and `motohawk.c`_ for the contents of the generated
files.

In this example we use ``--use-float`` so floating point numbers in the generated
code are single precision (``float``) instead of double precision (``double``).

.. code-block:: text

   $ python3 -m cantools generate_c_source --use-float tests/files/dbc/motohawk.dbc
   Successfully generated motohawk.h and motohawk.c.

In the next example we use ``--database-name`` to set a custom
namespace for all generated types, defines and functions. The output
file names are also changed by this option.

.. code-block:: text

   $ python3 -m cantools generate_c_source --database-name my_database_name tests/files/dbc/motohawk.dbc
   Successfully generated my_database_name.h and my_database_name.c.

See `my_database_name.h`_ and `my_database_name.c`_ for the contents
of the generated files.

In the next example we use ``--no-floating-point-numbers`` to generate
code without floating point types, i.e. ``float`` and ``double``.

.. code-block:: text

   $ python3 -m cantools generate_c_source --no-floating-point-numbers tests/files/dbc/motohawk.dbc
   Successfully generated motohawk.h and motohawk.c.

See `motohawk_no_floating_point_numbers.h`_ and
`motohawk_no_floating_point_numbers.c`_ for the contents of the
generated files.

In the last example ``--node`` is used to generate
message pack functions only for messages sent by the specified node and unpack
functions only for messages with its signal receivers belonging to that node.

.. code-block:: text

   $ cantools generate_c_source tests/files/dbc/motohawk.dbc --node PCM1
   Successfully generated motohawk.h and motohawk.c.

See `motohawk_sender_node.h`_ and
`motohawk_sender_node.c`_ for the contents of the
generated files.

Other C code generators:

- http://www.coderdbc.com

- https://github.com/howerj/dbcc

- https://github.com/lonkamikaze/hsk-libs/blob/master/scripts/dbc2c.awk

- https://sourceforge.net/projects/comframe/

The monitor subcommand
^^^^^^^^^^^^^^^^^^^^^^

Monitor CAN bus traffic in a text based user interface.

.. code-block:: text

   $ python3 -m cantools monitor tests/files/dbc/motohawk.dbc

.. image:: https://github.com/cantools/cantools/raw/master/docs/monitor.png

The menu at the bottom of the monitor shows the available commands.

- Quit: Quit the monitor. Ctrl-C can be used as well.

- Filter: Only display messages matching given regular
  expression. Press <Enter> to return to the menu from the filter
  input line.

- Play/Pause: Toggle between playing and paused (or running and freezed).

- Reset: Reset the monitor to its initial state.

Contributing
============

#. Fork the repository.

#. Install prerequisites.

   .. code-block:: text

      python3 -m pip install -e .[dev]

#. Implement the new feature or bug fix.

#. Implement test case(s) to ensure that future changes do not break
   legacy.

#. Run the linters

   .. code-block:: text

      ruff check src
      mypy src

#. Run the tests.

   .. code-block:: text

      tox -e py

#. Create a pull request.

.. |github-actions| image:: https://github.com/cantools/cantools/actions/workflows/pythonpackage.yml/badge.svg?branch=master
   :target: https://github.com/cantools/cantools/actions/workflows/pythonpackage.yml
   :alt: Github Actions workflow status

.. |coverage| image:: https://coveralls.io/repos/github/cantools/cantools/badge.svg?branch=master
   :target: https://coveralls.io/github/cantoolscantools?branch=master
   :alt: Test coverage reports on Coveralls.io

.. |nala| image:: https://img.shields.io/badge/nala-test-blue.svg
   :target: https://github.com/cantools/nala

.. _small DBC-file: https://github.com/cantools/cantools/blob/master/tests/files/dbc/motohawk.dbc

.. _motohawk.dbc: https://github.com/cantools/cantools/blob/master/tests/files/dbc/motohawk.dbc

.. _python-can: https://python-can.readthedocs.io/en/master/

.. _DBC: http://www.socialledge.com/sjsu/index.php?title=DBC_Format

.. _KCD: https://github.com/julietkilo/kcd

.. _tester: http://cantools.readthedocs.io/en/latest/#cantools.tester.Tester

.. _encoding: http://cantools.readthedocs.io/en/latest/#cantools.database.can.Message.encode

.. _encode_message(): http://cantools.readthedocs.io/en/latest/#cantools.database.can.Database.encode_message

.. _decodes: http://cantools.readthedocs.io/en/latest/#cantools.database.can.Database.decode_message

.. _examples: https://github.com/cantools/cantools/blob/master/examples

.. _structs: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L58

.. _pack: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L88

.. _unpack: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L102

.. _encode: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L116

.. _decode: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L125

.. _defines: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h#L42

.. _motohawk.h: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.h

.. _motohawk.c: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk.c

.. _my_database_name.h: https://github.com/cantools/cantools/blob/master/tests/files/c_source/my_database_name.h

.. _my_database_name.c: https://github.com/cantools/cantools/blob/master/tests/files/c_source/my_database_name.c

.. _motohawk_no_floating_point_numbers.h: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk_no_floating_point_numbers.h

.. _motohawk_no_floating_point_numbers.c: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk_no_floating_point_numbers.c

.. _motohawk_sender_node.h: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk_sender_node.h

.. _motohawk_sender_node.c: https://github.com/cantools/cantools/blob/master/tests/files/c_source/motohawk_sender_node.c

.. _matplotlib: https://matplotlib.org/