Skip to main content

RotPy

RotPy provides python bindings for the Spinnaker SDK to enable Pythonic control of Teledyne/FLIR/Point Grey USB and GigE cameras.

See the website for the complete documentation.

Github CI status

Installation

You can install RotPy using pre-compiled wheels on Windows, Linux, or Mac or by installing the Spinnaker SDK and then installing RotPy from source.

Either way, you’ll likely need to install the Spinnaker drivers so that the cameras are recognized. Please download it from their website and follow the instructions to install the drivers if the cameras are not found.

Pre-compiled wheels

To install from the pre-compiled wheels (assuming it’s available on your platform), simply do:

python -m pip install rotpy

From source

To install RotPy from source, you need to:

  1. Install the Spinnaker SDK development libraries.

  2. Install a C++ compiler that supports C++11. E.g. on Windows Visual Studio etc. On Mac you may have to export the following environment variables:

    export CXX="/usr/bin/clang"
    export CXXFLAGS="-std=c++11"
    export CPPFLAGS="-std=c++11"
  3. Set the environment variables so Python can locate the Spinnaker SDK.

    1. You need to set ROTPY_INCLUDE to the include directory, e.g. on Windows it may be something like set ROTPY_INCLUDE="C:\Program Files\FLIR\Spinnaker\include". On Linux and Mac it should typically be automatically found.

    2. You need to set ROTPY_LIB to the paths that contain the libraries and binaries. E.g. on Windows it may be set ROTPY_LIB="C:\Program Files\FLIR\Spinnaker\bin64\vs2015;C:\Program Files\FLIR\Spinnaker\lib64\vs2015". On Linux and Mac, again, it should typically be automatically found.

  4. Then install RotPy with:

    python -m pip install rotpy --no-binary rotpy
  5. At runtime, you’ll need to ensure the Spinnaker runtime binaries are on the system PATH using e.g. os.add_dll_directory.

    You may also have to set the environmental variable (depending on the OS bitness) GENICAM_GENTL32_PATH/GENICAM_GENTL64_PATH to the directory containing the FLIR_GenTL*.cti file as well as any or all variables FLIR_GENTL32_CTI_VS140/FLIR_GENTL64_CTI_VS140/FLIR_GENTL32_CTI/FLIR_GENTL64_CTI to the full path to the FLIR_GenTL*.cti file.

    Additionally, the FLIR_GenTL*.cti file containing directory may also need to be added to the system PATH. Spinnaker will raise an error if the cti file cannot be loaded.

Examples

Getting an image from a GigE camera

>>> from rotpy.system import SpinSystem
>>> from rotpy.camera import CameraList
>>> # get a system ref and a list of all attached cameras
>>> system = SpinSystem()
>>> cameras = CameraList.create_from_system(system, update_cams=True, update_interfaces=True)
>>> cameras.get_size()
    1
>>> # get the camera attached from the list
>>> camera = cameras.create_camera_by_index(0)
>>> camera.get_unique_id()
    '77T45WD4A84C_86TA1684_GGGGGG14_64CW3987'
>>> # init the camera and get one image
>>> camera.init_cam()
>>> # get its serial number
>>> camera.camera_nodes.DeviceSerialNumber.get_node_value()
'36548975'
>>> camera.begin_acquisition()
>>> image_cam = camera.get_next_image(timeout=5)
>>> # we copy the image so that we can release its camera buffer
>>> image = image_cam.deep_copy_image(image_cam)
>>> image_cam.release()
>>> camera.end_acquisition()
>>> # save the image
>>> image.save_png('image.png')
>>> # get image metadata
>>> image.get_bits_per_pixel()
    8
>>> image.get_height()
    512
>>> image.get_width()
    612
>>> image.get_frame_id()
    1
>>> image.get_frame_timestamp()
    67557050882
>>> image.get_pix_fmt()
    'Mono8'
>>> image.get_image_data_size()
    313344
>>> data = image.get_image_data()
>>> type(data)
    bytearray
>>> len(data)
    313344
>>> 512 * 612
    313344
>>> camera.deinit_cam()
>>> camera.release()

Configuring and getting an image from a USB3 camera

>>> from rotpy.system import SpinSystem
>>> from rotpy.camera import CameraList
>>> # create system/camera list instance and create the camera by serial number
>>> system = SpinSystem()
>>> cameras = CameraList.create_from_system(system, True, True)
>>> cameras.get_size()
1
>>> camera = cameras.create_camera_by_serial('87785435')
>>> # init so we can read the pixel format node
>>> camera.init_cam()
>>> # the names of the pixel formats available for the camera
>>> camera.camera_nodes.PixelFormat.get_entries_names()
['Mono8',
 'Mono12Packed',
 'Mono12p',
 'Mono16',
 'BayerGR8',
 ...,
 'BayerBG16',
 'YCbCr411_8_CbYYCrYY',
 'YCbCr422_8_CbYCrY',
 'YCbCr8_CbYCr',
 'RGB8']
>>> # the current one is BayerRG8
>>> node = camera.camera_nodes.PixelFormat.get_node_value()
>>> node
<rotpy.node.SpinEnumItemNode at 0x236edec43c8>
>>> node.get_enum_name()
'BayerRG8'
>>> # instead set it to RGB8
>>> camera.camera_nodes.PixelFormat.set_node_value_from_str('RGB8')
>>> camera.camera_nodes.PixelFormat.get_node_value().get_enum_name()
'RGB8'
>>> # set acquired image height to 800 pixels
>>> camera.camera_nodes.Height.get_node_value()
1200
>>> camera.camera_nodes.Height.set_node_value(800)
>>> camera.camera_nodes.Height.get_node_value()
800
>>> camera.camera_nodes.Height.get_max_value()
1200
>>> # get the current framerate
>>> camera.camera_nodes.AcquisitionFrameRate.is_readable()
True
>>> camera.camera_nodes.AcquisitionFrameRate.get_node_value()
42.7807502746582
>>> # get one image and copy and release it so we don't tie up the buffers
>>> camera.begin_acquisition()
>>> image_cam = camera.get_next_image()
>>> image = image_cam.deep_copy_image(image_cam)
>>> image_cam.release()
>>> camera.end_acquisition()
>>> # get some image metadat
>>> image.get_frame_timestamp() / 1e9
512.51940629
>>> image.get_height()
800
>>> image.get_buffer_size()
4608000
>>> 1920*800*3
4608000
>>> image.get_pix_fmt()
'RGB8'
>>> # cleanup
>>> camera.deinit_cam()
>>> camera.release()

System and camera properties

The system and camera properties can be read and set using node objects. These nodes, each represent a camera or system property, and they can be integer nodes, float nodes, boolean nodes, string nodes, command nodes etc.

These nodes derive from Spinnaker’s GenICam implementation for their cameras. RotPy provides access to a generic node access API as well as to some pre-listed nodes available on many cameras.

The generic API is accessed through the NodeMap using e.g. SpinSystem.get_tl_node_map, InterfaceDevice.get_tl_node_map, Camera.get_node_map, Camera.get_tl_dev_node_map, or Camera.get_tl_stream_node_map.

The pre-listed nodes can be accessed through e.g. SpinSystem.system_nodes, InterfaceDevice.interface_nodes, Camera.camera_nodes, Camera.tl_dev_nodes, or Camera.tl_stream_nodes. These link to the following respective objects: SystemNodes, InterfaceNodes, CameraNodes, TLDevNodes, and TLStreamNodes.

E.g. to access some of the system nodes using system_nodes:

>>> from rotpy.system import SpinSystem
>>> system = SpinSystem()
>>> # get a list of all boolean nodes
>>> system.system_nodes.bool_nodes
['EnumerateGEVInterfaces', 'EnumerateUSBInterfaces', 'EnumerateGen2Cameras']
>>> # let's inspect the USB node
>>> system.system_nodes.EnumerateUSBInterfaces
<rotpy.node.SpinBoolNode at 0x26822c20d68>
>>> # first make sure this node is actually available for this system
>>> system.system_nodes.EnumerateUSBInterfaces.is_available()
True
>>> system.system_nodes.EnumerateUSBInterfaces.get_node_value()
True
>>> system.system_nodes.EnumerateUSBInterfaces.get_description()
'Enables or disables enumeration of USB Interfaces.'
>>> system.system_nodes.EnumerateUSBInterfaces.get_name()
'EnumerateUSBInterfaces'
>>> system.system_nodes.EnumerateUSBInterfaces.get_node_value_as_str()
'1'
>>> system.system_nodes.EnumerateUSBInterfaces.get_short_description()
'Enables or disables enumeration of USB Interfaces.'

We can similarly use the node map to get the same node if it’s available:

>>> from rotpy.system import SpinSystem
>>> system = SpinSystem()
>>> node_map = system.get_tl_node_map()
>>> node = node_map.get_node_by_name('EnumerateUSBInterfaces')
>>> node is not None and node.is_available()
True
>>> node.get_node_value()
True
>>> node.get_description()
'Enables or disables enumeration of USB Interfaces.'

Similarly, for the camera, we can use the pre-listed nodes:

>>> # make sure to init the camera, otherwise many nodes won't be available
>>> camera.init_cam()
>>> # check that the auto-exposure setting is available
>>> camera.camera_nodes.ExposureAuto.is_available()
True
>>> camera.camera_nodes.ExposureAuto.get_description()
'Sets the automatic exposure mode when Exposure Mode is Timed.'
>>> # the auto-exposure is a enum node with children items
>>> camera.camera_nodes.ExposureAuto.get_node_value()
<rotpy.node.SpinEnumItemNode at 0x26822c2bc18>
>>> camera.camera_nodes.ExposureAuto.get_node_value().get_enum_name()
'Continuous'
>>> # but we can just get the symbolic string name directly
>>> camera.camera_nodes.ExposureAuto.get_node_value_as_str()
'Continuous'
>>> # to see what options are available for this enum node, look in the names module
>>> from rotpy.names.camera import ExposureAuto_names
>>> ExposureAuto_names
{'Off': 0, 'Once': 1, 'Continuous': 2}
>>> # or for pre-listed enum nodes, we can get it as an attribute
>>> camera.camera_nodes.ExposureAuto.enum_names
{'Off': 0, 'Once': 1, 'Continuous': 2}
>>> # try setting it to an incorrect value
>>> camera.camera_nodes.ExposureAuto.set_node_value_from_str('off', verify=True)
Traceback (most recent call last):
  File "<ipython-input-48-d16a67f0044c>", line 1, in <module>
    camera.camera_nodes.ExposureAuto.set_node_value_from_str('off', verify=True)
  File "rotpy\node.pyx", line 650, in rotpy.node.SpinValueNode.set_node_value_from_str
    cpdef set_node_value_from_str(self, str value, cbool verify=True):
  File "rotpy\node.pyx", line 664, in rotpy.node.SpinValueNode.set_node_value_from_str
    self._value_handle.FromString(s, verify)
RuntimeError: Spinnaker: GenICam::InvalidArgumentException= Feature 'ExposureAuto' : cannot convert value 'off', the value is invalid. : InvalidArgumentException thrown in node 'ExposureAuto' while calling 'ExposureAuto.FromString()' (file 'Enumeration.cpp', line 132) [-2001]
>>> # now set it correctly
>>> camera.camera_nodes.ExposureAuto.set_node_value_from_str('Off', verify=True)
>>> camera.camera_nodes.ExposureAuto.get_node_value_as_str()
'Off'

Similarly, we can use the node map to set the exposure back to "Continuous":

>>> node_map = camera.get_node_map()
>>> node = node_map.get_node_by_name('ExposureAuto')
>>> node is not None and node.is_available()
True
>>> node.get_node_value_as_str()
'Off'
>>> node.set_node_value_from_str('Continuous', verify=True)
>>> node.get_node_value_as_str()
'Continuous'
>>> # now de-init the camera and the node won't be available
>>> camera.deinit_cam()
>>> node.is_available()
False
>>> camera.camera_nodes.ExposureAuto.is_available()
False

Attaching event handlers

Camera detection events

We can register callbacks to be called when the system detects a camera arrival or removal on any interface, or on specific interfaces. E.g. to be notified on any interface:

>>> from rotpy.system import SpinSystem
>>> system = SpinSystem()
>>> # register a callback for both arrival and removal
>>> def arrival(handler, system, serial):
...     print('Arrived:', serial)
>>> def removal(handler, system, serial):
...     print('Removed:', serial)
>>> # register and then plug and unplug a camera twice
>>> handler = system.attach_interface_event_handler(arrival, removal, update=True)
Arrived: 36548975
Removed: 36548975
Arrived: 36548975
Removed: 36548975
>>> system.detach_interface_event_handler(handler)

Logging handler

We can also register logging event handlers to get any logging events on the system or devices:

>>> from rotpy.system import SpinSystem
>>> from rotpy.camera import CameraList
>>> # create system and set logging level to debug
>>> system = SpinSystem()
>>> system.set_logging_level('debug')
>>> # create a callback that prints the message
>>> def log_handler(handler, system, item):
...     print('Log:', item['category'], item['priority'], item['message'])
>>> # attach the callback and do something that causes logs
>>> handler = system.attach_log_event_handler(log_handler)
>>> cameras = CameraList.create_from_system(system, update_cams=True, update_interfaces=True)
Log: SpinnakerCallback DEBUG Spinnaker: GetCameras()
Log: GenTLCallback DEBUG Entering InterfaceGev::InterfaceGev()
Log: GenTLCallback DEBUG Leaving InterfaceGev::InterfaceGev()
Log: GenTLCallback DEBUG GenTL Trace: system.cpp, line 125, GenTL::EnumerateGigEInterfaces
Log: GenTLCallback DEBUG Entering HAL_UsbGetInterfaces()
Log: GenTLCallback DEBUG Enumerating host Controller PCI\VEN_8086&DEV_A12F&SUBSYS_06E41028&REV_31\3&11458735&0&A0
Log: GenTLCallback DEBUG Host Controller's child instance ID: USB\VID_8087&PID_0029\5&587A6F87&0&4
Log: GenTLCallback DEBUG Entering InterfaceUsb::InterfaceUsb()
Log: GenTLCallback DEBUG Leaving InterfaceUsb::InterfaceUsb()
Log: GenTLCallback DEBUG GenTL Trace: system.cpp, line 162, GenTL::EnumerateUsbInterfaces
Log: GenTLCallback DEBUG GenTL Trace: system.cpp, line 191, GenTL::InitializeInterfaces
Log: GenTLCallback DEBUG GenTL Trace: system.cpp, line 225, GenTL::System::RefreshInterfaces
Log: GenTLCallback DEBUG GenTL Trace: system.cpp, line 535, GenTL::System::UpdateInterfaceList
>>> # now detach the handler
>>> system.detach_log_event_handler(handler)

Camera image handler

We can also register a callback that is called on every new image that is received from the device, as opposed to polling for new images:

>>> from rotpy.camera import CameraList
>>> from rotpy.system import SpinSystem
>>> # create system and get a camera
>>> system = SpinSystem()
>>> cameras = CameraList.create_from_system(system, update_cams=True, update_interfaces=True)
>>> camera = cameras.create_camera_by_index(0)
>>> camera.init_cam()
>>> # create an image handler that prints the frame ID and time
>>> def image_callback(handler, camera, image):
...     print('Image:', image.get_frame_id(), image.get_frame_timestamp())
>>> # attach callback and start getting frames
>>> handler = camera.attach_image_event_handler(image_callback)
>>> camera.begin_acquisition()
Image: 1 388361262364
Image: 2 388366605529
 ...
Image: 135 389077033335
>>> # stop frames and printing
>>> camera.end_acquisition()
>>> camera.detach_image_event_handler(handler)
>>> camera.deinit_cam()
>>> camera.release()

Camera events

We can also register a callback that is called on camera events. E.g.:

>>> from rotpy.camera import CameraList
>>> from rotpy.system import SpinSystem
>>> # create system and get a camera
>>> system = SpinSystem()
>>> cameras = CameraList.create_from_system(system, update_cams=True, update_interfaces=True)
>>> camera = cameras.create_camera_by_index(0)
>>> camera.init_cam()
>>> # define the callback and attach it
>>> def event_callback(handler, camera, event):
...     print('Event:', event, handler.get_event_data(event), handler.get_event_metadata())
>>> handler = camera.attach_device_event_handler(event_callback)
>>> # now use the EventSelector enum to get the enum items which
>>> correspond to the event names that are available.
>>> nodes = camera.camera_nodes.EventSelector.get_entries()
>>> # not all are actually available, so only activate the ones available
>>> nodes = [node for node in nodes if node.is_available()]
>>> for node in nodes:
...     print(node.get_enum_name())
...     camera.camera_nodes.EventSelector.set_node_value_from_str(node.get_enum_name())
...     camera.camera_nodes.EventNotification.set_node_value_from_str('On')
ExposureEnd
>>> # this printed just ExposureEnd, indicating only this event was available
>>> # start acquisition so that the events occur
>>> camera.begin_acquisition()
Event: EventExposureEnd {'frame_id': 62629213124996} ('device', 'EventExposureEnd', 40003)
Event: EventExposureEnd {'frame_id': 62633508092293} ('device', 'EventExposureEnd', 40003)
...
Event: EventExposureEnd {'frame_id': 62676457765304} ('device', 'EventExposureEnd', 40003)
>>> camera.end_acquisition()
>>> camera.detach_device_event_handler(handler)
>>> camera.deinit_cam()
>>> camera.release()

Release files for rotpy 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rotpy 0.2.1
File Size Uploaded
rotpy-0.2.1.tar.gz 142.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for rotpy 0.2.1
File
rotpy-0.2.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
rotpy-0.2.1-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
rotpy-0.2.1-cp311-cp311-manylinux_2_27_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64 Details
rotpy-0.2.1-cp311-cp311-macosx_10_14_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.14+ x86-64 Details
rotpy-0.2.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
rotpy-0.2.1-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
rotpy-0.2.1-cp310-cp310-manylinux_2_27_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64 Details
rotpy-0.2.1-cp310-cp310-macosx_10_14_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.14+ x86-64 Details
rotpy-0.2.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
rotpy-0.2.1-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
rotpy-0.2.1-cp39-cp39-manylinux_2_27_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.27+ x86-64 Details
rotpy-0.2.1-cp39-cp39-macosx_10_14_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.14+ x86-64 Details
rotpy-0.2.1-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
rotpy-0.2.1-cp38-cp38-win32.whl CPython 3.8 CPython 3.8 Windows x86-32 Details
rotpy-0.2.1-cp38-cp38-manylinux_2_27_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.27+ x86-64 Details
rotpy-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.14+ x86-64 Details
rotpy-0.2.1-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
rotpy-0.2.1-cp37-cp37m-win32.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-32 Details
rotpy-0.2.1-cp37-cp37m-manylinux_2_27_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.27+ x86-64 Details
rotpy-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.14+ x86-64 Details

Total release size: 299.0 MB

Release files / rotpy-0.2.1.tar.gz

Download URL rotpy-0.2.1.tar.gz
Size 142.7 kB
Tags Source
SHA-256 checksum
How to use checksums
5975f18a6dc3f2af293d10f19dfd79960c92a55259a306e4eeaf0f42ea5d2374
BLAKE2b-256 checksum
How to use checksums
988ff2dff737c0bbb478293543031d496c962c5f112542c0a600666b7c2434a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp311-cp311-win_amd64.whl

Download URL rotpy-0.2.1-cp311-cp311-win_amd64.whl
Size 12.4 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
5f6897d58197b3fb2173e585b2eb110be65d62ad31a275fb8dda431d8ca7cdc5
BLAKE2b-256 checksum
How to use checksums
8833c656fe269bb561d403dabfecf95b16f73ddb1628b9b2f398468ec9a65d98
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.0

Release files / rotpy-0.2.1-cp311-cp311-win32.whl

Download URL rotpy-0.2.1-cp311-cp311-win32.whl
Size 9.4 MB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
e42501610b0bbe32ed93a0c9e2acd018bcc850076c572b25dfd5593c609f66c0
BLAKE2b-256 checksum
How to use checksums
5e51789907e7b6e5ceb79b9f6955908783a944a5539c249c7898ea90b8f527cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.0

Release files / rotpy-0.2.1-cp311-cp311-manylinux_2_27_x86_64.whl

Download URL rotpy-0.2.1-cp311-cp311-manylinux_2_27_x86_64.whl
Size 22.2 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
d40e26c536f31d4e68375d08d46c1a65e7f5eb98da9eb5ec140925b8e33aae66
BLAKE2b-256 checksum
How to use checksums
d05952c5b05635e5bf684ffc30767bc3bb970fb11378624f39cee5af888e2cae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp311-cp311-macosx_10_14_x86_64.whl

Download URL rotpy-0.2.1-cp311-cp311-macosx_10_14_x86_64.whl
Size 15.7 MB
Tags CPython 3.11 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
4d71d34935203af64020026350d010fe4f108fa31181dede6c845e93352b1a6f
BLAKE2b-256 checksum
How to use checksums
73b04c246365dda9b166487d984246addd305ec50b3238594eec7f263e8e3629
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp310-cp310-win_amd64.whl

Download URL rotpy-0.2.1-cp310-cp310-win_amd64.whl
Size 12.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
8b9ccf65da9580dcd06d464fbca84291b1cddd96dac137351ac2a721b0786596
BLAKE2b-256 checksum
How to use checksums
e602820d1bcfd51268b6300d34e919d4a36104f3a6b45b5fc01e5d431166a7b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp310-cp310-win32.whl

Download URL rotpy-0.2.1-cp310-cp310-win32.whl
Size 9.4 MB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
e902067941291adf1f5b7aefb1c46690cdb78161eb6d7128ad8393dda5e308ac
BLAKE2b-256 checksum
How to use checksums
c2275e4c77a7d5307093bba795b0ce818f124b6faa9240340012919e0ee88618
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp310-cp310-manylinux_2_27_x86_64.whl

Download URL rotpy-0.2.1-cp310-cp310-manylinux_2_27_x86_64.whl
Size 21.9 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
0245f7bf0c8e72d534f66d92be28f3f5b78f278e32bb1c6d14ad62ae952f608e
BLAKE2b-256 checksum
How to use checksums
f1c36de6aaffc0f9bb2735653d5db9f64fe8ea052f4ea65a01ef187df0db70f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp310-cp310-macosx_10_14_x86_64.whl

Download URL rotpy-0.2.1-cp310-cp310-macosx_10_14_x86_64.whl
Size 15.7 MB
Tags CPython 3.10 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
279eda3a1b4bc3f9146dc72c7dd4ff7b43bae1b3ba8cbfd9ebab70bed3e83fe8
BLAKE2b-256 checksum
How to use checksums
49a1dea3b73547b1902da4dfbbf6656af75819d99cc6a31656f5010c35a774da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.0

Release files / rotpy-0.2.1-cp39-cp39-win_amd64.whl

Download URL rotpy-0.2.1-cp39-cp39-win_amd64.whl
Size 12.4 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
66adb96d8de80a3f802e9cd5767f57bd00934f5a87b377512d48e1610b23b35a
BLAKE2b-256 checksum
How to use checksums
69454ba4405e1ff254bda6a627b6e2764a17a45f5f40fdfa6d75813bdd63ea4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / rotpy-0.2.1-cp39-cp39-win32.whl

Download URL rotpy-0.2.1-cp39-cp39-win32.whl
Size 9.4 MB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
1fc21132708438f3d662517382fb8962ddfd1d4afa21c17715c9b288916dbc9f
BLAKE2b-256 checksum
How to use checksums
f143973b425ed9249dd77f6517e9a81e2b0777c1eb08d8ff13dc8a061b1c566a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.13

Release files / rotpy-0.2.1-cp39-cp39-manylinux_2_27_x86_64.whl

Download URL rotpy-0.2.1-cp39-cp39-manylinux_2_27_x86_64.whl
Size 22.0 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
9f2ed40bf6a6baa23408de546f54f75d14689239264f5f65b00a7b2c970760ca
BLAKE2b-256 checksum
How to use checksums
66af8cf44bab8993ca73a3b3641a9dac06eda3c2acb6ef46473af63417721988
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp39-cp39-macosx_10_14_x86_64.whl

Download URL rotpy-0.2.1-cp39-cp39-macosx_10_14_x86_64.whl
Size 15.7 MB
Tags CPython 3.9 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
3a6ab291592937a93be0d752b8e024e2889e07d225adef86ed507ba74c1b5fff
BLAKE2b-256 checksum
How to use checksums
4f7cd706e2e14c5c76bc9f8d585cf85355262ea0038d78d6117659750687a3de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.0

Release files / rotpy-0.2.1-cp38-cp38-win_amd64.whl

Download URL rotpy-0.2.1-cp38-cp38-win_amd64.whl
Size 12.7 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
8cd9a70f24549bb7fe03e54e24645abdf1fd5a1c0d52872c6adb4e5a3d625fa1
BLAKE2b-256 checksum
How to use checksums
3aedf5d0cbe4f9303efd5fe761b1d6c84d07dd69ce4a844f3255df2cccf9d29f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.10

Release files / rotpy-0.2.1-cp38-cp38-win32.whl

Download URL rotpy-0.2.1-cp38-cp38-win32.whl
Size 9.7 MB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
52b2fa70a39cb1634aebadd66245d5b14d941e469e35168f1eb84e208d19646f
BLAKE2b-256 checksum
How to use checksums
c186614a3a8cb35d8a57e2c2b8d345916e91793085e6855168636f4762edc99f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.10

Release files / rotpy-0.2.1-cp38-cp38-manylinux_2_27_x86_64.whl

Download URL rotpy-0.2.1-cp38-cp38-manylinux_2_27_x86_64.whl
Size 22.4 MB
Tags CPython 3.8 Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
2551ce0241b348b1cef413eabeb3dcff4634ac043bdf05da4b28de83a228315f
BLAKE2b-256 checksum
How to use checksums
e24c08aadb611bcb33cb61b9de7ef8a73c8859f634fc33a485dc73f320f1cc9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl

Download URL rotpy-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl
Size 15.6 MB
Tags CPython 3.8 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
7e04283ab07cc1af2b0d467846c00f604eee82b34b492fbc659b1e075f533708
BLAKE2b-256 checksum
How to use checksums
325c3052b54315ae4d794c2e19e265509189324cb05383285c1baf07de56660e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp37-cp37m-win_amd64.whl

Download URL rotpy-0.2.1-cp37-cp37m-win_amd64.whl
Size 13.0 MB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
a105f96d120440db1d312dc47d118fcc03bc04bf9f3040e89ab00a2beb3fa57b
BLAKE2b-256 checksum
How to use checksums
4dbfa99879a31a7a8d965e2bf97df4a670fde68973312d65759159b7a7df8ff0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.7.9

Release files / rotpy-0.2.1-cp37-cp37m-win32.whl

Download URL rotpy-0.2.1-cp37-cp37m-win32.whl
Size 10.1 MB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
91e045f17024d16f09e89914e6fec5ab49d4a283f38711ca6b282f50eceac8b8
BLAKE2b-256 checksum
How to use checksums
ea2d6eab889279c8e5c74cf714011f7f0a31fbbbfa62f472f9edc0f341962a84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.7.9

Release files / rotpy-0.2.1-cp37-cp37m-manylinux_2_27_x86_64.whl

Download URL rotpy-0.2.1-cp37-cp37m-manylinux_2_27_x86_64.whl
Size 21.5 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.27+ x86-64
SHA-256 checksum
How to use checksums
008361b0adeee80c106990df7436e4bd888a35ccf68721a3ec9e19988426bcf2
BLAKE2b-256 checksum
How to use checksums
4d54bca601082dacf4f5901488bfcd9ef9d9f8757c97ca2c3851823cecfd1aa7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / rotpy-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl

Download URL rotpy-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl
Size 15.6 MB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
03e9ff4e6419591e2c9e4133e81a4e85ecb471077294f40d55138db2b0a6829c
BLAKE2b-256 checksum
How to use checksums
26382494dab4eb16e3752e24b4af54c9661108e2ab03c75051d2f354f4827c8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release history Release notifications | RSS feed

This release

0.2.1 This release

21 release files

0.1.0

17 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page