Skip to main content

Lewis - Let's write intricate simulators!

Project description

Lewis

Lewis - Let's write intricate simulators.

Lewis is a Python framework for simulating hardware devices.

Lewis can be installed via pip or ran from source. See relevant usage sections of the docs for more details.

Resources: GitHub PyPI

Lewis was previously named "Plankton" but, due to a package with the same name on PyPI, we decided to rename the project.

Lewis is licensed under GPL v3 or later.

Purpose and Use Cases

Lewis is being developed in the context of instrument control at the ESS, but it is general enough to be used in many other contexts that require detailed, stateful software simulations of hardware devices.

We consider a detailed device simulation to be one that can communicate using the same protocol as the real device, and that can very closely approximate real device behaviour in terms of what is seen through this protocol. This includes gradual processes, side-effects and error conditions.

The purpose of Lewis is to provide a common framework to facilitate the development of such simulators. The framework provides a common set of tools, including communication protocol services, which helps minimize code replication and allows the developer of a simulated device to focus on capturing device behaviour.

Potential use cases for detailed device simulators include:

  • Replacing the physical device when developing and testing software that interfaces with the device
  • Testing failure conditions without risking damage to the physical device
  • Automated system and unit tests of software that communicates with the device
  • Perform "dry runs" against test scripts that are to be run on the real device

Using a simulation for the above has the added benefit that, unlike most real devices, a simulation may be sped up / fast-forwarded past any lengthy delays or processes that occur in the device.

Features

Brief Terminology

Device\ s and Interface\ s are two independent concepts in Lewis. The Device is model for the device behaviour and internal memory. A Device can be represented using a StateMachine, but it does not have to be. A Device does not include anything specific to the communication protocol with the Device. An Interface provides bindings from a protocol Adapter to a Device. Common Adapter\ s, , such as TCP stream, Modbus and EPICS, are provided by Lewis. The Device and Interface are instantiated as part of a Simulation that provides a cycle "heart beat" and manages other environmental aspects and services.

What Can You Do With Lewis?

  • Create new Device\ s to closely imitate the internal behaviour and memory of something
  • Optionally make a Device work as a StateMachine via StateMachineDevice to give rich behaviours
  • Create one or more Interface\ s over your Device to expose it as an EPICS IOC, a TCP listener, or on any other bespoke protocol you like
  • Access and control the Device while it is running via a control server
  • Access and control the Simulation while it is running via a control server
  • Control server can be accessed via command-line utility, Python bindings, or JSON RPC.

Getting started

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lewis-1.3.5.tar.gz (220.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lewis-1.3.5-py3-none-any.whl (241.7 kB view details)

Uploaded Python 3

File details

Details for the file lewis-1.3.5.tar.gz.

File metadata

  • Download URL: lewis-1.3.5.tar.gz
  • Upload date:
  • Size: 220.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for lewis-1.3.5.tar.gz
Algorithm Hash digest
SHA256 11db8a648f9c206b59764807a29e1924362c5dc0cab4aa99817a8cbbd18b1a13
MD5 a362d52cbe76282b47f52de8794525c3
BLAKE2b-256 366258f080a57abfa146479c313be1a739b4dd1f9e553d31af8e5776dd07723b

See more details on using hashes here.

Provenance

The following attestation bundles were made for lewis-1.3.5.tar.gz:

Publisher: release.yml on ISISComputingGroup/lewis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lewis-1.3.5-py3-none-any.whl.

File metadata

  • Download URL: lewis-1.3.5-py3-none-any.whl
  • Upload date:
  • Size: 241.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for lewis-1.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 35093c33a0d2e9f176929ede3aee772a23cc9bc80845aaad0079f9d03a07f12e
MD5 10704ed281b1df33ec96335b9f73a96c
BLAKE2b-256 e822f4705fa95794a2aa2610134aae4b0889ad87a70d85d5d3bbd8e9bfd4ac4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lewis-1.3.5-py3-none-any.whl:

Publisher: release.yml on ISISComputingGroup/lewis

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page