diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c5aee906..c2b5ba8e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1 +1,261 @@ -Details on how to contribute to the project. \ No newline at end of file +# Contributing to Molecular Nodes + +## Table of Contents +- [Contributing to Molecular Nodes](#contributing-to-molecular-nodes) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Molecular Nodes Overview](#molecular-nodes-overview) + - [Getting Started](#getting-started) + - [Understanding Blender Add-ons](#understanding-blender-add-ons) + - [`bpy`](#bpy) + - [Creating a Basic Operator:](#creating-a-basic-operator) + - [Project Structure](#project-structure) + - [Import](#import) + - [Manipulation](#manipulation) + - [Coding Standards](#coding-standards) + - [Submitting Changes](#submitting-changes) + - [Testing](#testing) + - [Python Environments](#python-environments) + - [Running Tests](#running-tests) + - [Writing and Building Docs](#writing-and-building-docs) + - [Getting Help](#getting-help) + +## Introduction +Molecular Nodes is an add-on for the 3D modelling and animation program [Blender](https://blender.org). It enables import of structural biology data formats into Blender, and provides a suite of methods for interacting, animating and visualising this data. + +The structure of Molecular Nodes is likely quite different to other python projects you may be familiar with, and different to other Blender add-ons as well. Some things are done in a particularly _quirky_ qay, usually to be usable as an add-on inside of Blender. + +Molecular Nodes is primarily an add-on, and intended to be interacted with through Blender's GUI. There is experimental support for installing and using as a python package from `pypi`. This is still extremely experimental, and again results in a lot of strange quirks as we are using a program intended for use through a GUI, through a script. + +### Molecular Nodes Overview +There are a couple of distinct areas of Molecular Nodes to be aware of. + +1. Reading, parsing and importing data formats +2. Visualising data through Geometry Nodes + +Most of the 'scripting' side of things is for the first section of parsing the wide variety of structural biology data formats and importing them into Blender. The general idea is that we turn molecular structures into 3D models by turning each atom into a vertex, and each bond into an edge between vertices. Once this data is imported, Blender has a suite of tools for dealing with '3D models', which we can exploit to work on molecular models as well. + +## Getting Started +Unfortunately `.blend` files are binary files to git, so the full repo size can be quite large when downloading the full history (~1GB). It's recommended to clone this repository using `git clone --depth 1` which greatly reduces the size of the download. + +For writing code, I highly recommend using VSCode and the [Blender VS Code](https://github.com/JacquesLucke/blender_vscode) addon which streamlines the development process. It provides a range of commands for building and quickly refreshing the add-on during development, greatly speeding up the process. + +Once installed, you can use the `Blender: Build and Start` command with VS Code open in the addon directory, to start Blender with the addon built and installed. Any changes that are then made to the underlying addon code, can be quickly previewed inside of the running Blender by using the VS Code command `Blender: Reload Addons`. + + +## Understanding Blender Add-ons +The general idea with add-ons is that they provide new functionality to Blender, usually by adding new panels with buttons that execute custom python code. Blender ships with it's own Python kernel inside, allowing for essentially any arbitrary Python code to be executed. + +Usually this is done through the creation of [`operators`](https://docs.blender.org/manual/en/latest/interface/operators.html). Think of operators as just Python code that is executed when a button is pressed inside of the GUI. All of the the buttons inside of Blender execute an operator when pressed, which then carries out the desired actions. The operators have support for taking into account the current state of the GUI, where the mouse is, what objects are available etc when executing the code. + +We _can_ execute code without calling an operator, but this has to be done via the Python REPL inside of Blender. To create a useful add-on, we define the code we want to be executed, then create a related operator that can call the code when required. + +Because operators take into account `context` and other aspects of the GUI when executing, they can be difficult to work with at times when trying to script without the GUI, like when trying to use Blender as a package inside of a Jupyter Notebook. To help with this problem, the general design of Molecular Nodes is to create a function which includes all of the code we want, then the associated operator only calls this function with the relevant parameters and does nothing else. That way we can get the same results as the operator while scripting, without having to deal with operators. + +In the example add-on below, we can see the operator class being defined as a subclass of the `bpy.types.Operator` class. It will have a method called `execute(self, context)` which is what is called when a button is pressed in the add-on. We will have access to `context` information (where the mouse cursor is, what viewport we are in etc). You can include as much code as you wish inside of the `execute()` function, but like previously described the design with Molecular Nodes is to define the function elsewhere so it can be called more easily in another script, then have the operator just call the the function and report the success. + +### `bpy` + +In Blender add-on development, `import bpy` is your gateway to the Blender Python API. Anything that you can do via Blender's UI, you can usually achieve via calls to `bpy`. + +```python +import bpy + +bpy.data # Access all of the data blocks inside of Blender +bpy.data.objects # access all of the objects in the scene by name + +cube = bpy.data.objects['Cube'] # get the data block for an object in Blender +cube.data # the data associated with the cube, such as edges, vertices, faces +cube.data.attributes +cube.data.vertices + +bpy.ops # all of the pre-defined operators inside of Blender + +bpy.context # all of the global context values, i.e. different properties set in the UI +bpy.types # the different pre-defined types used through bpy +``` + +`bpy` exposes a wide range of classes and functions, enabling you to perform tasks like creating objects, applying materials, setting animations, and much more, all programmatically. + +For example, `bpy.data` grants access to the data blocks within Blender, such as meshes, materials, and textures, while `bpy.ops` allows you to call operators to perform specific actions, like rendering an image or duplicating an object. + +Until earlier this year, `bpy` was only available when running scripts from inside of Blender, but it is now a `pip` installable package, which helps us with running test suites and for potential integrations with Jupyter Notebooks and other scripting environments. + +### Creating a Basic Operator: + +In Blender, operators are actions that can be triggered by the user or other parts of the code. They can range from simple tasks like moving an object to complex operations like rendering an animation. + +Operators can execute code of any arbitrary length. They can provide additional _context_ in the form of the `context` argument, which is given by Blender depending on where the operator is invoked. If you press a button in one window of Blender, it might do something different compared to a different window of Blender. Most of the operators inside of Molecular Nodes do not change their behaviour. + +The design of Molecular Nodes is mostly to expose all of the functionality inside individual function calls. To download a protein from the PDB, import it to Blender and create starting style, you can use the `mn.load.molecular_rcsb()` function. Inside of the UI for Blender, when the user clicks the Download from PDB button, the operator just calls this function with the inputs taken from the local context, such as starting style and PDB code to download. The operators themselves should not be doing any kind of complex operations, as that functionality won't then be available for use via scripts. + +Below is the minimum required to create an add-on for Blender. We define a custom function, create an operator that executes code (calling the function), we create some UI that displays a button to execute the operator, and we create `register()` and `unregister()` functions to install and uninstall the add-on. + + +```py +import bpy + +def my_function(): + print("hello world!") + +class SimpleOperator(bpy.types.Operator): + bl_idname = "wm.simple_operator" + bl_label = "Simple Operator" + + def execute(self, context): + #code to be executed by the operator goes in the `execute()` function + my_function() + + # operators inside of Blender return `{'FINISHED'}` to signal they have completed + # correctly and Blender can return control of the program back to the user. + # This is why they are useful for UI operations, but less useful for scripting + # other potential returns are 'CANCELLED', 'RUNNING_MODAL', 'PASS_THROUGH' + return {'FINISHED'} + +# define a menu that will appear inside of the Blender's UI +# the layout function `layout.operator()` will take a string name of the operator, +# and create a button in the UI which will execute the operator when the buttons is pressed +def menu_func(self, context): + # you can input either the string for the operator name, or take that + # name from the class itself + self.layout.operator(SimpleOperator.bl_idname) + self.layout.operator("wm.simple_operator") + + +# The `register()` and `unregister()` functions are run whenever Blender loads the +# addon. This occurs the first time the add-on is installed and enabled, and then whenever +# Blender is started while the add-on is enabled. For Blender to be aware of the operator's +# existence, it has to be registered (and unregistered when uninstalled). The same has to +# happen for the UI components +def register(): + bpy.utils.register_class(SimpleOperator) + bpy.types.VIEW3D_MT_mesh.append(menu_func) + +def unregister(): + bpy.utils.unregister_class(SimpleOperator) + bpy.types.VIEW3D_MT_mesh.remove(menu_func) +``` + +The `register()` and `unregister()` functions are two crucial components of a Blender add-on and have to be included. These functions are called when the add-on is enabled or disabled. They register all of the operators, UI elements and other necessary components with Blender when the add-on is enabled, and remove them all when it's disabled to ensure that you don't have a panel showing up for an add-on that isn't being used. + +These functions are called automatically when using Blender via the GUI, but have to be manually called when scripting outside of Blender. + +```py +import molecularnodes as mn +mn.register() +# other code here +``` + + +## Project Structure + +The way that data flows and is handled is unconventional, and likely different +to other python packages that you might have experience with. + +There are two main components to the add-on, split into `Import` and +`Manipulation`. Depending on data format, the `import` is handled by a different python package. For downloading from the wwPDB and importing most local `.pdb` and `.cif` files, `biotite` is used. When importing a molecular dynamics trajectory. + +All import methods result in a Blender object, and then the `Geometry Nodes` system inside of Blender manipulates and styles the imported 3D model. + + +### Import + +Importing is the more traditional aspect of the add-on. With the help of several +python packages such as `biotite`, `MDAnalysis` and others, various molecular +data formats are parsed. + +Once parsed, the data is turned into a 3D mesh, with a vertex for each atom and +an edge for each bond (if information available). Now inside Blender as a +'native' 3D mesh, Geometry Nodes handles all further manipulation of the data, +with additional animations, duplication, selections, and creation of new +geometry in the form of styles. + +Below shows the potential flow of data, showing whether MDAnalysis (MDA), +Blender's python module (bpy) or Geometry Nodes (GN) are responsible for +handling that data. Once the data is parsed into a universe, MDA can select, +filter and do other operations on the topology and the trajectory of the +universe. While MDA can update the object inside of Blender by + +```mermaid +flowchart LR +A{Data File} -->|MDA|B +B(MDA.Universe) -->|bpy|C +B -->|MDA|B +C[Blender Object] -->|GN|D +C -->|GN|C +D -->|GN|C +D[Styled Molecule] --->|GN|D +``` + +### Manipulation + +Manipulation is handled entirely by the Geometry Nodes (GN) system that exists +inside of Blender. Inside of Geometry Nodes, users can create node trees to +modify, animate and style their macromolecular structures, through a range of +pre-made node groups which are included inside of the add-on. + +The nodes take the underlying atomic data, which is stored as a 3D mesh with +each vertex representing an atom, and each edge between those vertices +representing a bond (where applicable). Both the vertices and edges can store +arbitrary attributes, which we use to store the atomic information with the +atoms and bonds. Currently only numeric, boolean and vector attributes are +supported, but in the future strings and more complex attributes will also be +supported. + +Interacting with the nodes via scripting is still quite difficult, the API on +this on Blender's side still needs a lot of improvements. So far the best +approach has been to 'manually' make the node groups inside of Blender, and then +save them and append the pre-made node groups from other `.blend` files to the +current working file. This isn't a fantastic strategy as the `.blend` files are +opaque to `git`, so we just need to rely upon tests for checking if something is +broken. + +## Coding Standards +This project has already gone through several iterations to improve the general code base and the ability for others to contribute. It started as my (@bradyajohnston) first python project, so there is still lots of old code that could do with a refresh. It is slowly being improve to better fit PEP8 standards, but there are no official standards for the project currently. I welcome suggestions and discussion around the topic. + +## Submitting Changes +Please open an issue or PR if you would like to discuss submitting changes. Support for importing more data formats or improving on current import formats are more than welcome. Submitting changes for node groups can be a bit tricky as the node graphs inside of Blender don't work with `git`, so please open an issue or discussion with propose changes. + + +## Testing + +### Python Environments +Blender is _VERY PARTICULAR_ about python versions. Blender 4.1 now uses Python `3.11.X`. Blender 4.0 and some earlier versions use Python `3.10.X`. I recommend using `anaconda` or something similar to manage python environments. They aren't required for building and running the add-on (this is handled by the Python that is shipped inside of Blender), but they are required for running tests. + +```bash +conda create -n mn python==3.10 +conda activate mn +pip install poetry +poetry install --with dev +``` + +### Running Tests +```bash +pytest -v # run with a more verbose output +pytest -v tests/test_load.py # run a single tests file +pytest -v -k centre # pattern match to 'centre' and only run tests with that in the name +``` + +Look over other tests to see how we are structuring them. Most of the tests will involve importing data, generating a 3D model and then creating a `snapshot` of the attributes for some subset of vertices from that 3D model. +We could snapshot _all_ of the vertices, but the snapshots are just `.txt` files so the diffs would become very large. +When changing something that _should_ change the output of the snapshots, we end up with _very_ large number of files changed. +Based on the current snapshot method, I can't think of of a better way to handle this. + +## Writing and Building Docs +To build the documentation, [`Quarto`](https://quarto.org) is used. The docs can be built and previewed with the following line which launches a live preview of the docs. + + +```bash +conda activate mn +python docs/build_node_docs.py +quarto preview +``` + +The long-form written documentation is all inside of `docs/`. Documentation is written in markdown (`.md`) or quarto-flavored markdown (`.qmd`) which allows to execute code when building the docs. + +The documentation for individual nodes which are shown [here](https://bradyajohnston.github.io/MolecularNodes/nodes/) are built by running the `docs/build_node_docs.py`, which extracts information from the relevent `.blend` data files inside of `molecularnodes/assets/`. Combining the information for the input / output types & tooltips with the summaries described in `molecularnodes/ui/node_info.py` we can then generate nice HTML documentation for each of the nodes. + +This isn't currently the best implementation for this. I would prefer to just pull from those nodes which are defined in the `.blend` file, but we aren't able to include descriptions for the node groups currently inside of the `.blend`. `node_info.py` is also used for building the add menus as well as the documentation. To update the descriptions of inputs, outputs and data types the nodes themselves need to be updated inside of the `.blend` files. Relevant example videos should be updated when nodes are changed. + +## Getting Help +Please open an issue on the repo to ask questions relating to development or testing. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index c2b5ba8e..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,261 +0,0 @@ -# Contributing to Molecular Nodes - -## Table of Contents -- [Contributing to Molecular Nodes](#contributing-to-molecular-nodes) - - [Table of Contents](#table-of-contents) - - [Introduction](#introduction) - - [Molecular Nodes Overview](#molecular-nodes-overview) - - [Getting Started](#getting-started) - - [Understanding Blender Add-ons](#understanding-blender-add-ons) - - [`bpy`](#bpy) - - [Creating a Basic Operator:](#creating-a-basic-operator) - - [Project Structure](#project-structure) - - [Import](#import) - - [Manipulation](#manipulation) - - [Coding Standards](#coding-standards) - - [Submitting Changes](#submitting-changes) - - [Testing](#testing) - - [Python Environments](#python-environments) - - [Running Tests](#running-tests) - - [Writing and Building Docs](#writing-and-building-docs) - - [Getting Help](#getting-help) - -## Introduction -Molecular Nodes is an add-on for the 3D modelling and animation program [Blender](https://blender.org). It enables import of structural biology data formats into Blender, and provides a suite of methods for interacting, animating and visualising this data. - -The structure of Molecular Nodes is likely quite different to other python projects you may be familiar with, and different to other Blender add-ons as well. Some things are done in a particularly _quirky_ qay, usually to be usable as an add-on inside of Blender. - -Molecular Nodes is primarily an add-on, and intended to be interacted with through Blender's GUI. There is experimental support for installing and using as a python package from `pypi`. This is still extremely experimental, and again results in a lot of strange quirks as we are using a program intended for use through a GUI, through a script. - -### Molecular Nodes Overview -There are a couple of distinct areas of Molecular Nodes to be aware of. - -1. Reading, parsing and importing data formats -2. Visualising data through Geometry Nodes - -Most of the 'scripting' side of things is for the first section of parsing the wide variety of structural biology data formats and importing them into Blender. The general idea is that we turn molecular structures into 3D models by turning each atom into a vertex, and each bond into an edge between vertices. Once this data is imported, Blender has a suite of tools for dealing with '3D models', which we can exploit to work on molecular models as well. - -## Getting Started -Unfortunately `.blend` files are binary files to git, so the full repo size can be quite large when downloading the full history (~1GB). It's recommended to clone this repository using `git clone --depth 1` which greatly reduces the size of the download. - -For writing code, I highly recommend using VSCode and the [Blender VS Code](https://github.com/JacquesLucke/blender_vscode) addon which streamlines the development process. It provides a range of commands for building and quickly refreshing the add-on during development, greatly speeding up the process. - -Once installed, you can use the `Blender: Build and Start` command with VS Code open in the addon directory, to start Blender with the addon built and installed. Any changes that are then made to the underlying addon code, can be quickly previewed inside of the running Blender by using the VS Code command `Blender: Reload Addons`. - - -## Understanding Blender Add-ons -The general idea with add-ons is that they provide new functionality to Blender, usually by adding new panels with buttons that execute custom python code. Blender ships with it's own Python kernel inside, allowing for essentially any arbitrary Python code to be executed. - -Usually this is done through the creation of [`operators`](https://docs.blender.org/manual/en/latest/interface/operators.html). Think of operators as just Python code that is executed when a button is pressed inside of the GUI. All of the the buttons inside of Blender execute an operator when pressed, which then carries out the desired actions. The operators have support for taking into account the current state of the GUI, where the mouse is, what objects are available etc when executing the code. - -We _can_ execute code without calling an operator, but this has to be done via the Python REPL inside of Blender. To create a useful add-on, we define the code we want to be executed, then create a related operator that can call the code when required. - -Because operators take into account `context` and other aspects of the GUI when executing, they can be difficult to work with at times when trying to script without the GUI, like when trying to use Blender as a package inside of a Jupyter Notebook. To help with this problem, the general design of Molecular Nodes is to create a function which includes all of the code we want, then the associated operator only calls this function with the relevant parameters and does nothing else. That way we can get the same results as the operator while scripting, without having to deal with operators. - -In the example add-on below, we can see the operator class being defined as a subclass of the `bpy.types.Operator` class. It will have a method called `execute(self, context)` which is what is called when a button is pressed in the add-on. We will have access to `context` information (where the mouse cursor is, what viewport we are in etc). You can include as much code as you wish inside of the `execute()` function, but like previously described the design with Molecular Nodes is to define the function elsewhere so it can be called more easily in another script, then have the operator just call the the function and report the success. - -### `bpy` - -In Blender add-on development, `import bpy` is your gateway to the Blender Python API. Anything that you can do via Blender's UI, you can usually achieve via calls to `bpy`. - -```python -import bpy - -bpy.data # Access all of the data blocks inside of Blender -bpy.data.objects # access all of the objects in the scene by name - -cube = bpy.data.objects['Cube'] # get the data block for an object in Blender -cube.data # the data associated with the cube, such as edges, vertices, faces -cube.data.attributes -cube.data.vertices - -bpy.ops # all of the pre-defined operators inside of Blender - -bpy.context # all of the global context values, i.e. different properties set in the UI -bpy.types # the different pre-defined types used through bpy -``` - -`bpy` exposes a wide range of classes and functions, enabling you to perform tasks like creating objects, applying materials, setting animations, and much more, all programmatically. - -For example, `bpy.data` grants access to the data blocks within Blender, such as meshes, materials, and textures, while `bpy.ops` allows you to call operators to perform specific actions, like rendering an image or duplicating an object. - -Until earlier this year, `bpy` was only available when running scripts from inside of Blender, but it is now a `pip` installable package, which helps us with running test suites and for potential integrations with Jupyter Notebooks and other scripting environments. - -### Creating a Basic Operator: - -In Blender, operators are actions that can be triggered by the user or other parts of the code. They can range from simple tasks like moving an object to complex operations like rendering an animation. - -Operators can execute code of any arbitrary length. They can provide additional _context_ in the form of the `context` argument, which is given by Blender depending on where the operator is invoked. If you press a button in one window of Blender, it might do something different compared to a different window of Blender. Most of the operators inside of Molecular Nodes do not change their behaviour. - -The design of Molecular Nodes is mostly to expose all of the functionality inside individual function calls. To download a protein from the PDB, import it to Blender and create starting style, you can use the `mn.load.molecular_rcsb()` function. Inside of the UI for Blender, when the user clicks the Download from PDB button, the operator just calls this function with the inputs taken from the local context, such as starting style and PDB code to download. The operators themselves should not be doing any kind of complex operations, as that functionality won't then be available for use via scripts. - -Below is the minimum required to create an add-on for Blender. We define a custom function, create an operator that executes code (calling the function), we create some UI that displays a button to execute the operator, and we create `register()` and `unregister()` functions to install and uninstall the add-on. - - -```py -import bpy - -def my_function(): - print("hello world!") - -class SimpleOperator(bpy.types.Operator): - bl_idname = "wm.simple_operator" - bl_label = "Simple Operator" - - def execute(self, context): - #code to be executed by the operator goes in the `execute()` function - my_function() - - # operators inside of Blender return `{'FINISHED'}` to signal they have completed - # correctly and Blender can return control of the program back to the user. - # This is why they are useful for UI operations, but less useful for scripting - # other potential returns are 'CANCELLED', 'RUNNING_MODAL', 'PASS_THROUGH' - return {'FINISHED'} - -# define a menu that will appear inside of the Blender's UI -# the layout function `layout.operator()` will take a string name of the operator, -# and create a button in the UI which will execute the operator when the buttons is pressed -def menu_func(self, context): - # you can input either the string for the operator name, or take that - # name from the class itself - self.layout.operator(SimpleOperator.bl_idname) - self.layout.operator("wm.simple_operator") - - -# The `register()` and `unregister()` functions are run whenever Blender loads the -# addon. This occurs the first time the add-on is installed and enabled, and then whenever -# Blender is started while the add-on is enabled. For Blender to be aware of the operator's -# existence, it has to be registered (and unregistered when uninstalled). The same has to -# happen for the UI components -def register(): - bpy.utils.register_class(SimpleOperator) - bpy.types.VIEW3D_MT_mesh.append(menu_func) - -def unregister(): - bpy.utils.unregister_class(SimpleOperator) - bpy.types.VIEW3D_MT_mesh.remove(menu_func) -``` - -The `register()` and `unregister()` functions are two crucial components of a Blender add-on and have to be included. These functions are called when the add-on is enabled or disabled. They register all of the operators, UI elements and other necessary components with Blender when the add-on is enabled, and remove them all when it's disabled to ensure that you don't have a panel showing up for an add-on that isn't being used. - -These functions are called automatically when using Blender via the GUI, but have to be manually called when scripting outside of Blender. - -```py -import molecularnodes as mn -mn.register() -# other code here -``` - - -## Project Structure - -The way that data flows and is handled is unconventional, and likely different -to other python packages that you might have experience with. - -There are two main components to the add-on, split into `Import` and -`Manipulation`. Depending on data format, the `import` is handled by a different python package. For downloading from the wwPDB and importing most local `.pdb` and `.cif` files, `biotite` is used. When importing a molecular dynamics trajectory. - -All import methods result in a Blender object, and then the `Geometry Nodes` system inside of Blender manipulates and styles the imported 3D model. - - -### Import - -Importing is the more traditional aspect of the add-on. With the help of several -python packages such as `biotite`, `MDAnalysis` and others, various molecular -data formats are parsed. - -Once parsed, the data is turned into a 3D mesh, with a vertex for each atom and -an edge for each bond (if information available). Now inside Blender as a -'native' 3D mesh, Geometry Nodes handles all further manipulation of the data, -with additional animations, duplication, selections, and creation of new -geometry in the form of styles. - -Below shows the potential flow of data, showing whether MDAnalysis (MDA), -Blender's python module (bpy) or Geometry Nodes (GN) are responsible for -handling that data. Once the data is parsed into a universe, MDA can select, -filter and do other operations on the topology and the trajectory of the -universe. While MDA can update the object inside of Blender by - -```mermaid -flowchart LR -A{Data File} -->|MDA|B -B(MDA.Universe) -->|bpy|C -B -->|MDA|B -C[Blender Object] -->|GN|D -C -->|GN|C -D -->|GN|C -D[Styled Molecule] --->|GN|D -``` - -### Manipulation - -Manipulation is handled entirely by the Geometry Nodes (GN) system that exists -inside of Blender. Inside of Geometry Nodes, users can create node trees to -modify, animate and style their macromolecular structures, through a range of -pre-made node groups which are included inside of the add-on. - -The nodes take the underlying atomic data, which is stored as a 3D mesh with -each vertex representing an atom, and each edge between those vertices -representing a bond (where applicable). Both the vertices and edges can store -arbitrary attributes, which we use to store the atomic information with the -atoms and bonds. Currently only numeric, boolean and vector attributes are -supported, but in the future strings and more complex attributes will also be -supported. - -Interacting with the nodes via scripting is still quite difficult, the API on -this on Blender's side still needs a lot of improvements. So far the best -approach has been to 'manually' make the node groups inside of Blender, and then -save them and append the pre-made node groups from other `.blend` files to the -current working file. This isn't a fantastic strategy as the `.blend` files are -opaque to `git`, so we just need to rely upon tests for checking if something is -broken. - -## Coding Standards -This project has already gone through several iterations to improve the general code base and the ability for others to contribute. It started as my (@bradyajohnston) first python project, so there is still lots of old code that could do with a refresh. It is slowly being improve to better fit PEP8 standards, but there are no official standards for the project currently. I welcome suggestions and discussion around the topic. - -## Submitting Changes -Please open an issue or PR if you would like to discuss submitting changes. Support for importing more data formats or improving on current import formats are more than welcome. Submitting changes for node groups can be a bit tricky as the node graphs inside of Blender don't work with `git`, so please open an issue or discussion with propose changes. - - -## Testing - -### Python Environments -Blender is _VERY PARTICULAR_ about python versions. Blender 4.1 now uses Python `3.11.X`. Blender 4.0 and some earlier versions use Python `3.10.X`. I recommend using `anaconda` or something similar to manage python environments. They aren't required for building and running the add-on (this is handled by the Python that is shipped inside of Blender), but they are required for running tests. - -```bash -conda create -n mn python==3.10 -conda activate mn -pip install poetry -poetry install --with dev -``` - -### Running Tests -```bash -pytest -v # run with a more verbose output -pytest -v tests/test_load.py # run a single tests file -pytest -v -k centre # pattern match to 'centre' and only run tests with that in the name -``` - -Look over other tests to see how we are structuring them. Most of the tests will involve importing data, generating a 3D model and then creating a `snapshot` of the attributes for some subset of vertices from that 3D model. -We could snapshot _all_ of the vertices, but the snapshots are just `.txt` files so the diffs would become very large. -When changing something that _should_ change the output of the snapshots, we end up with _very_ large number of files changed. -Based on the current snapshot method, I can't think of of a better way to handle this. - -## Writing and Building Docs -To build the documentation, [`Quarto`](https://quarto.org) is used. The docs can be built and previewed with the following line which launches a live preview of the docs. - - -```bash -conda activate mn -python docs/build_node_docs.py -quarto preview -``` - -The long-form written documentation is all inside of `docs/`. Documentation is written in markdown (`.md`) or quarto-flavored markdown (`.qmd`) which allows to execute code when building the docs. - -The documentation for individual nodes which are shown [here](https://bradyajohnston.github.io/MolecularNodes/nodes/) are built by running the `docs/build_node_docs.py`, which extracts information from the relevent `.blend` data files inside of `molecularnodes/assets/`. Combining the information for the input / output types & tooltips with the summaries described in `molecularnodes/ui/node_info.py` we can then generate nice HTML documentation for each of the nodes. - -This isn't currently the best implementation for this. I would prefer to just pull from those nodes which are defined in the `.blend` file, but we aren't able to include descriptions for the node groups currently inside of the `.blend`. `node_info.py` is also used for building the add menus as well as the documentation. To update the descriptions of inputs, outputs and data types the nodes themselves need to be updated inside of the `.blend` files. Relevant example videos should be updated when nodes are changed. - -## Getting Help -Please open an issue on the repo to ask questions relating to development or testing. diff --git a/molecularnodes/blender/node.py b/molecularnodes/blender/node.py deleted file mode 100644 index 9e1032f9..00000000 --- a/molecularnodes/blender/node.py +++ /dev/null @@ -1,30 +0,0 @@ -from abc import ABCMeta -import numpy as np -import bpy - - -class Node(metaclass=ABCMeta): - def __init__(self, node: bpy.types.Node, chain=[]): - self.node = node - self.group = node.id_data - self.chain = chain - - @property - def location(self): - return np.array(self.node.location) - - def new(self, name): - "Add a new node to the node group." - try: - return self.group.nodes.new(f"GeometryNode{name}") - except RuntimeError: - return self.group.nodes.new(f"ShaderNode{name}") - - def link(self, name, linkto=0, linkfrom=0): - "Create a new node along in the chain and create a link to it. Return the new node." - new_node = self.new(name) - new_node.location = self.location + np.array((200, 0)) - - self.group.links.new(self.node.outputs[linkfrom], new_node.inputs[linkto]) - - return Node(new_node, chain=self.chain + [self]) diff --git a/molecularnodes/blender/obj.py b/molecularnodes/blender/obj.py index d5a9cb2b..b8630617 100644 --- a/molecularnodes/blender/obj.py +++ b/molecularnodes/blender/obj.py @@ -1,7 +1,7 @@ from dataclasses import dataclass -from typing import Union, List, Optional -from typing import Type +from typing import Union, List, Optional, Type from types import TracebackType +from pathlib import Path import bpy import numpy as np @@ -169,6 +169,13 @@ def create_object( return object +def set_position(bob: bpy.types.Object, positions: np.ndarray) -> None: + "A stripped-back way to set the positions for higher performance." + attribute = bob.data.attributes["position"] + attribute.data.foreach_set("vector", positions.reshape(-1)) + bob.data.vertices[0].co = bob.data.vertices[0].co + + def set_attribute( object: bpy.types.Object, name: str, @@ -246,7 +253,7 @@ def set_attribute( # is the case For now we will set a single vert to it's own position, which triggers a # proper refresh of the object data. try: - object.data.vertices[0].co = object.data.certices[0].co + object.data.vertices[0].co = object.data.vertices[0].co except AttributeError: object.data.update() @@ -300,7 +307,7 @@ def get_attribute(object: bpy.types.Object, name: str = "position", evaluate: bo return array -def import_vdb(file: str, collection: bpy.types.Collection = None) -> bpy.types.Object: +def import_vdb(file: Union[Path, str], collection: bpy.types.Collection = None) -> bpy.types.Object: """ Imports a VDB file as a Blender volume object, in the MolecularNodes collection. diff --git a/molecularnodes/color.py b/molecularnodes/color.py index 0f0718d6..1de71eba 100644 --- a/molecularnodes/color.py +++ b/molecularnodes/color.py @@ -1,8 +1,9 @@ import random import colorsys import numpy as np +import numpy.typing as npt from numpy.typing import NDArray -from typing import List, Dict, Tuple, Any +from typing import List, Dict, Tuple, Any, Iterable def random_rgb(seed: int = 6) -> NDArray[np.float64]: @@ -18,7 +19,7 @@ def color_from_atomic_number(atomic_number: int) -> Tuple[int, int, int, int]: def colors_from_elements( - atomic_numbers: NDArray[np.int32], + atomic_numbers: Iterable, ) -> NDArray[np.float64]: colors = np.array([color_from_atomic_number(x) for x in atomic_numbers]) return colors diff --git a/molecularnodes/io/parse/density.py b/molecularnodes/io/parse/density.py index c4881b77..086efff4 100644 --- a/molecularnodes/io/parse/density.py +++ b/molecularnodes/io/parse/density.py @@ -2,6 +2,9 @@ import os import bpy +from typing import Union, Optional +from pathlib import Path + class Density(metaclass=ABCMeta): """ @@ -9,14 +12,14 @@ class Density(metaclass=ABCMeta): """ - def __init__(self, file_path): - self.file_path: str = None + def __init__(self, file_path: Union[str, Path]) -> None: + self.file_path = file_path self.grid = None - self.file_vdb: str = None - self.threshold: float = None - self.object: bpy.types.Object = None + self.file_vdb: Union[Path, str] + self.threshold: float = 1.0 + self.object: Optional[bpy.types.Object] = None - def path_to_vdb(self, file: str, center: False, invert: False): + def path_to_vdb(self, file: Union[Path, str], center: False, invert: False) -> Path: """ Convert a file path to a corresponding VDB file path. @@ -37,4 +40,4 @@ def path_to_vdb(self, file: str, center: False, invert: False): name += "_invert" if invert else "" file_name = name + ".vdb" file_path = os.path.join(folder_path, file_name) - return file_path + return Path(file_path) diff --git a/molecularnodes/io/parse/mda.py b/molecularnodes/io/parse/mda.py index 0ab7f7e8..b08b7b00 100644 --- a/molecularnodes/io/parse/mda.py +++ b/molecularnodes/io/parse/mda.py @@ -1,27 +1,10 @@ import bpy from bpy.app.handlers import persistent -try: - import MDAnalysis as mda -except ImportError: - HAS_mda = False - import types - - class MockAtomGroup: - pass - - class MockUniverse: - pass - - mda = types.ModuleType("MDAnalysis") - mda.Universe = MockUniverse - mda.AtomGroup = MockAtomGroup - mda.core = types.ModuleType("core") - mda.topology = types.ModuleType("topology") - -else: - HAS_mda = True + +import MDAnalysis as mda import numpy as np +from numpy.typing import NDArray import warnings import pickle from typing import Union, List, Dict @@ -103,31 +86,29 @@ def __init__(self, ag: mda.AtomGroup, style: str = "vdw", world_scale: float = 0 is_solvent : np.ndarray Whether the atoms in the atomgroup are solvent. """ - if not HAS_mda: - raise ImportError("MDAnalysis is not installed.") self.ag = ag self.world_scale = world_scale self.style = style @property def n_atoms(self) -> int: - return self.ag.n_atoms + return int(self.ag.n_atoms) @property def style(self) -> str: - return self._style + return str(self._style) @style.setter - def style(self, style): + def style(self, style: str) -> None: self._style = style @staticmethod - def bool_selection(ag, selection) -> np.ndarray: + def bool_selection(ag: mda.AtomGroup, selection: NDArray[np.bool_]) -> NDArray[np.bool_]: return np.isin(ag.ix, ag.select_atoms(selection).ix).astype(bool) @property - def positions(self) -> np.ndarray: - return self.ag.positions * self.world_scale + def positions(self) -> NDArray[np.float32]: + return self.ag.positions * self.world_scale # type: ignore @property def bonds(self) -> List[List[int]]: @@ -159,7 +140,7 @@ def elements(self) -> List[str]: ValueError, ): # If 'x' is not in 'data.elements.keys()' or 'guess_atom_element(x)' fails elements = ["X"] * self.ag.n_atoms - return elements + return elements # type: ignore @property def atomic_number(self) -> np.ndarray: @@ -419,8 +400,6 @@ def __init__(self, world_scale: float = 0.01, in_memory: bool = False): Whether the old import is used (default: False). """ log = start_logging(logfile_name="mda") - if not HAS_mda: - raise ImportError("MDAnalysis is not installed.") # if the session already exists, load the existing session if hasattr(bpy.types.Scene, "mda_session"): diff --git a/molecularnodes/io/parse/molecule.py b/molecularnodes/io/parse/molecule.py index ed3bf1b9..b28a6864 100644 --- a/molecularnodes/io/parse/molecule.py +++ b/molecularnodes/io/parse/molecule.py @@ -713,7 +713,7 @@ def att_sec_struct() -> NDArray[np.int32]: ) if verbose: print(f'Added {att["name"]} after {time.process_time() - start} s') - except ValueError: + except AttributeError: if verbose: warnings.warn(f"Unable to add attribute: {att['name']}") print(f'Failed adding {att["name"]} after {time.process_time() - start} s') diff --git a/molecularnodes/io/parse/mrc.py b/molecularnodes/io/parse/mrc.py index facd8e16..d1eaa149 100644 --- a/molecularnodes/io/parse/mrc.py +++ b/molecularnodes/io/parse/mrc.py @@ -1,8 +1,10 @@ import os - +import mrcfile +import pyopenvdb as vdb import bpy import numpy as np - +from typing import Union +from pathlib import Path from ...blender import coll, nodes, obj from .density import Density @@ -15,13 +17,16 @@ class MRC(Density): that can be written as `.vdb` files and the imported into Blender as volumetric objects. """ - def __init__(self, file_path, center=False, invert=False, overwrite=False): - super().__init__(self) - self.file_path = file_path + def __init__( + self, file_path: Union[str, Path], center: bool = False, invert: bool = False, overwrite: bool = False + ) -> None: + super().__init__(file_path=file_path) self.grid = self.map_to_grid(self.file_path, center=center) self.file_vdb = self.map_to_vdb(self.file_path, center=center, invert=invert, overwrite=overwrite) - def create_model(self, name="NewDensity", style="density_surface", setup_nodes=True) -> bpy.types.Object: + def create_model( + self, name: str = "NewDensity", style: str = "density_surface", setup_nodes: bool = True + ) -> bpy.types.Object: """ Loads an MRC file into Blender as a volumetric object. @@ -55,12 +60,12 @@ def create_model(self, name="NewDensity", style="density_surface", setup_nodes=T def map_to_vdb( self, - file: str, + file: Union[str, Path], invert: bool = False, - world_scale=0.01, + world_scale: float = 0.01, center: bool = False, - overwrite=False, - ) -> (str, float): + overwrite: bool = False, + ) -> Path: """ Converts an MRC file to a .vdb file using pyopenvdb. @@ -124,7 +129,7 @@ def map_to_vdb( # Return the path to the output file return file_path - def map_to_grid(self, file: str, invert: bool = False, center: bool = False): + def map_to_grid(self, file: Union[str, Path], invert: bool = False, center: bool = False) -> vdb.GridBase: """ Reads an MRC file and converts it into a pyopenvdb FloatGrid object. @@ -144,8 +149,6 @@ def map_to_grid(self, file: str, invert: bool = False, center: bool = False): pyopenvdb.FloatGrid A pyopenvdb FloatGrid object containing the density data. """ - import mrcfile - import pyopenvdb as vdb volume = mrcfile.read(file) diff --git a/pyproject.toml b/pyproject.toml index 09934c73..543d0d43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ syrupy = "*" quartodoc = "*" scipy = "*" mypy = "*" +ruff = "*" [build-system] @@ -38,6 +39,8 @@ build-backend = "poetry.core.masonry.api" [tool.mypy] strict = true ignore_missing_imports = true +plugins = "numpy.typing.mypy_plugin" + [tool.ruff] # Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default. diff --git a/tests/__snapshots__/test_ops.ambr b/tests/__snapshots__/test_ops.ambr index e74455fa..d41ed712 100644 --- a/tests/__snapshots__/test_ops.ambr +++ b/tests/__snapshots__/test_ops.ambr @@ -1,612 +1,44 @@ # serializer version: 1 -# name: test_op_api_cartoon[1BNA] - [29.5 23.6 29.0 33.5 38.1 34.0 36.6 26.9 37.5 28.6 23.4 33.0 29.6 27.4 - 50.9 34.0 35.3 39.6 31.8 33.9 28.5 42.5 42.5 40.4 34.6 27.7 35.6 31.6 - 36.0 28.7 28.5 38.8 29.7 32.6 26.4 45.3 40.5 26.4 29.2 41.2 36.6 38.0 - 32.5 33.9 28.7 37.6 42.7 27.7 32.0 28.6 32.3 38.5 29.2 31.8 33.9 39.1 - 29.2 39.1 28.7 37.4 34.8 37.6 29.2 35.3 28.0 46.7 46.0 30.1 28.6 29.3 - 26.4 37.4 36.5 40.8 33.9 29.9 27.7 38.8 49.3 26.1 33.9 26.6 29.0 31.5 - 27.5 28.3 30.6 40.8 35.7 35.6 34.5 34.9 35.7 39.1 44.0 33.8 37.0 31.6 - 31.6 47.6] -# --- -# name: test_op_api_cartoon[1BNA].1 - AttributeError("The selected attribute 'occupancy' does not exist on the mesh.") +# name: test_op_api_cartoon[4ozs] + [66.0 36.4 44.1 44.5 39.7 55.8 44.4 65.4 41.1 42.6 39.8 57.1 45.3 38.4 + 50.7 36.7 35.7 52.8 34.2 58.8 45.5 36.7 47.0 51.6 60.7 51.6 42.8 54.3 + 45.4 77.8 52.2 36.5 37.4 52.4 51.3 43.1 43.1 44.6 33.7 49.4 65.3 44.7 + 43.0 37.1 63.1 34.1 50.7 61.7 50.6 50.1 37.1 40.3 60.6 40.2 37.2 35.6 + 42.2 48.6 69.3 40.2 50.2 40.8 41.8 40.3 50.1 41.3 55.3 46.0 32.5 42.9 + 43.8 35.7 71.2 40.5 48.8 45.3 47.7 40.3 47.0 64.7 54.6 79.5 37.1 50.5 + 76.1 74.5 42.2 36.8 50.6 56.3 64.4 35.2 57.6 40.0 35.2 36.7 76.1 44.7 + 48.3 42.7] # --- -# name: test_op_api_cartoon[1BNA].10 - AttributeError("The selected attribute 'atom_id' does not exist on the mesh.") +# name: test_op_api_cartoon[4ozs].1 + [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. + 1. 1. 1. 1.] +# --- +# name: test_op_api_cartoon[4ozs].10 + [1366 194 1156 629 87 2 354 1120 892 764 55 649 1165 474 + 982 1275 1278 232 459 1345 1318 636 216 1008 803 229 866 973 + 602 1064 230 470 691 241 107 482 860 1161 460 1215 1195 70 + 862 585 1023 722 851 290 220 1189 1246 477 284 639 743 469 + 908 1154 535 336 506 1237 29 448 398 44 800 1330 727 895 + 903 1252 924 685 305 1165 119 439 1002 941 236 1054 587 219 + 1067 1070 908 183 1222 1013 1121 719 970 210 456 636 1076 1163 + 408 47] # --- -# name: test_op_api_cartoon[1BNA].11 - AttributeError("The selected attribute 'atom_name' does not exist on the mesh.") +# name: test_op_api_cartoon[4ozs].11 + [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] # --- -# name: test_op_api_cartoon[1BNA].12 - [[0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0]] -# --- -# name: test_op_api_cartoon[1BNA].13 - [[ 0.2 0.3 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.1 0.2] - [ 0.1 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.2 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.2 0.3] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.0] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.3] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.3 0.0] - [ 0.2 0.3 0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.1 0.2 0.0] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.1 -0.1] - [ 0.1 0.3 -0.0] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.1 -0.1] - [ 0.1 0.2 0.0] - [ 0.2 0.1 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.1 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 -0.0] - [ 0.2 0.2 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.2 0.1 -0.1] - [ 0.1 0.3 -0.0] - [ 0.2 0.3 -0.1] - [ 0.1 0.3 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.1 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.3] - [ 0.1 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.1] - [ 0.1 0.3 -0.1] - [ 0.2 0.3 0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.3 -0.0]] -# --- -# name: test_op_api_cartoon[1BNA].14 - AttributeError("The selected attribute 'is_backbone' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].15 - AttributeError("The selected attribute 'is_alpha_carbon' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].16 - AttributeError("The selected attribute 'is_solvent' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].17 - AttributeError("The selected attribute 'is_nucleic' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].18 - AttributeError("The selected attribute 'is_peptide' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].19 - AttributeError("The selected attribute 'is_hetero' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].2 - AttributeError("The selected attribute 'vdw_radii' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].20 - AttributeError("The selected attribute 'is_carb' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].21 - AttributeError("The selected attribute 'bond_type' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].22 - AttributeError("The selected attribute 'mass' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].23 - [29.5 23.6 29.0 33.5 38.1 34.0 36.6 26.9 37.5 28.6 23.4 33.0 29.6 27.4 - 50.9 34.0 35.3 39.6 31.8 33.9 28.5 42.5 42.5 40.4 34.6 27.7 35.6 31.6 - 36.0 28.7 28.5 38.8 29.7 32.6 26.4 45.3 40.5 26.4 29.2 41.2 36.6 38.0 - 32.5 33.9 28.7 37.6 42.7 27.7 32.0 28.6 32.3 38.5 29.2 31.8 33.9 39.1 - 29.2 39.1 28.7 37.4 34.8 37.6 29.2 35.3 28.0 46.7 46.0 30.1 28.6 29.3 - 26.4 37.4 36.5 40.8 33.9 29.9 27.7 38.8 49.3 26.1 33.9 26.6 29.0 31.5 - 27.5 28.3 30.6 40.8 35.7 35.6 34.5 34.9 35.7 39.1 44.0 33.8 37.0 31.6 - 31.6 47.6] -# --- -# name: test_op_api_cartoon[1BNA].24 - AttributeError("The selected attribute 'occupancy' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].25 - AttributeError("The selected attribute 'vdw_radii' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].26 - AttributeError("The selected attribute 'lipophobicity' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].27 - AttributeError("The selected attribute 'charge' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].28 - [18 3 16 24 8 2 1 5 21 19 15 23 23 12 10 24 2 9 16 7 23 14 17 17 - 21 4 6 18 18 22 23 9 19 21 4 14 11 4 11 13 8 14 23 7 22 20 9 4 - 2 19 7 20 11 16 7 16 18 20 22 16 2 20 11 8 19 14 10 11 19 4 4 16 - 21 17 7 4 19 9 10 22 7 12 16 7 5 19 7 17 1 6 24 6 1 20 10 18 - 21 19 19 10] -# --- -# name: test_op_api_cartoon[1BNA].29 - [30 31 32 32 32 32 31 30 32 32 31 31 31 32 32 32 32 32 32 32 32 32 30 30 - 31 32 31 30 30 32 32 32 33 31 32 32 32 32 31 31 33 32 31 32 32 33 31 32 - 32 32 32 32 31 32 32 31 31 33 32 32 32 33 31 33 33 32 32 31 32 31 32 32 - 31 31 32 32 33 32 32 32 32 32 32 33 30 32 33 31 31 31 32 30 31 33 32 30 - 31 33 33 32] -# --- -# name: test_op_api_cartoon[1BNA].3 - AttributeError("The selected attribute 'lipophobicity' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].30 - AttributeError("The selected attribute 'atomic_number' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].31 - [1 0 1 1 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 - 0 0 1 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 - 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 0] -# --- -# name: test_op_api_cartoon[1BNA].32 - AttributeError("The selected attribute 'entity_id' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].33 - AttributeError("The selected attribute 'atom_id' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].34 - AttributeError("The selected attribute 'atom_name' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].35 - [[0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.8 0.8 1.0] - [0.4 0.4 0.8 1.0]] -# --- -# name: test_op_api_cartoon[1BNA].36 - [[ 0.2 0.3 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.1 0.2] - [ 0.1 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.2 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.2 0.3] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 -0.0] - [ 0.2 0.2 0.3] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.0] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.3] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.3 0.0] - [ 0.2 0.3 0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.1 0.2 0.0] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.1 -0.1] - [ 0.1 0.3 -0.0] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.1 -0.1] - [ 0.1 0.2 0.0] - [ 0.2 0.1 -0.0] - [ 0.2 0.2 0.3] - [ 0.1 0.1 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 -0.0] - [ 0.2 0.2 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.2 0.1 -0.1] - [ 0.1 0.3 -0.0] - [ 0.2 0.3 -0.1] - [ 0.1 0.3 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.1 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.3] - [ 0.1 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.2 0.1] - [ 0.1 0.3 -0.1] - [ 0.2 0.3 0.0] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.3 -0.0]] -# --- -# name: test_op_api_cartoon[1BNA].37 - AttributeError("The selected attribute 'is_backbone' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].38 - AttributeError("The selected attribute 'is_alpha_carbon' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].39 - AttributeError("The selected attribute 'is_solvent' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].4 - AttributeError("The selected attribute 'charge' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].40 - AttributeError("The selected attribute 'is_nucleic' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].41 - AttributeError("The selected attribute 'is_peptide' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].42 - AttributeError("The selected attribute 'is_hetero' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].43 - AttributeError("The selected attribute 'is_carb' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].44 - AttributeError("The selected attribute 'bond_type' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].45 - AttributeError("The selected attribute 'mass' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].5 - [18 3 16 24 8 2 1 5 21 19 15 23 23 12 10 24 2 9 16 7 23 14 17 17 - 21 4 6 18 18 22 23 9 19 21 4 14 11 4 11 13 8 14 23 7 22 20 9 4 - 2 19 7 20 11 16 7 16 18 20 22 16 2 20 11 8 19 14 10 11 19 4 4 16 - 21 17 7 4 19 9 10 22 7 12 16 7 5 19 7 17 1 6 24 6 1 20 10 18 - 21 19 19 10] -# --- -# name: test_op_api_cartoon[1BNA].6 - [30 31 32 32 32 32 31 30 32 32 31 31 31 32 32 32 32 32 32 32 32 32 30 30 - 31 32 31 30 30 32 32 32 33 31 32 32 32 32 31 31 33 32 31 32 32 33 31 32 - 32 32 32 32 31 32 32 31 31 33 32 32 32 33 31 33 33 32 32 31 32 31 32 32 - 31 31 32 32 33 32 32 32 32 32 32 33 30 32 33 31 31 31 32 30 31 33 32 30 - 31 33 33 32] -# --- -# name: test_op_api_cartoon[1BNA].7 - AttributeError("The selected attribute 'atomic_number' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[1BNA].8 - [1 0 1 1 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 - 0 0 1 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 - 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 0] -# --- -# name: test_op_api_cartoon[1BNA].9 - AttributeError("The selected attribute 'entity_id' does not exist on the mesh.") -# --- -# name: test_op_api_cartoon[4ozs] - [66.0 36.4 44.1 44.5 39.7 55.8 44.4 65.4 41.1 42.6 39.8 57.1 45.3 38.4 - 50.7 36.7 35.7 52.8 34.2 58.8 45.5 36.7 47.0 51.6 60.7 51.6 42.8 54.3 - 45.4 77.8 52.2 36.5 37.4 52.4 51.3 43.1 43.1 44.6 33.7 49.4 65.3 44.7 - 43.0 37.1 63.1 34.1 50.7 61.7 50.6 50.1 37.1 40.3 60.6 40.2 37.2 35.6 - 42.2 48.6 69.3 40.2 50.2 40.8 41.8 40.3 50.1 41.3 55.3 46.0 32.5 42.9 - 43.8 35.7 71.2 40.5 48.8 45.3 47.7 40.3 47.0 64.7 54.6 79.5 37.1 50.5 - 76.1 74.5 42.2 36.8 50.6 56.3 64.4 35.2 57.6 40.0 35.2 36.7 76.1 44.7 - 48.3 42.7] -# --- -# name: test_op_api_cartoon[4ozs].1 - [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. - 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. - 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. - 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. - 1. 1. 1. 1.] -# --- -# name: test_op_api_cartoon[4ozs].10 - [1366 194 1156 629 87 2 354 1120 892 764 55 649 1165 474 - 982 1275 1278 232 459 1345 1318 636 216 1008 803 229 866 973 - 602 1064 230 470 691 241 107 482 860 1161 460 1215 1195 70 - 862 585 1023 722 851 290 220 1189 1246 477 284 639 743 469 - 908 1154 535 336 506 1237 29 448 398 44 800 1330 727 895 - 903 1252 924 685 305 1165 119 439 1002 941 236 1054 587 219 - 1067 1070 908 183 1222 1013 1121 719 970 210 456 636 1076 1163 - 408 47] -# --- -# name: test_op_api_cartoon[4ozs].11 - [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] -# --- -# name: test_op_api_cartoon[4ozs].12 - [[0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] - [0.4 0.4 0.8 1.0] +# name: test_op_api_cartoon[4ozs].12 + [[0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] + [0.4 0.4 0.8 1.0] [0.4 0.4 0.8 1.0] [0.4 0.4 0.8 1.0] [0.4 0.4 0.8 1.0] @@ -3413,1135 +2845,115 @@ [0.9 0.2 0.6] [1.1 0.6 0.4] [0.8 0.4 0.8] - [0.8 0.2 0.6] - [0.5 0.4 0.5] - [1.2 0.4 0.7] - [1.1 0.4 0.4]] -# --- -# name: test_op_api_mda.39 - [ True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True False False - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True False True True True True - True True True True True True True True True True True True - True False True True] -# --- -# name: test_op_api_mda.4 - AttributeError("The selected attribute 'charge' does not exist on the mesh.") -# --- -# name: test_op_api_mda.40 - [ True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True False False - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True False True True True True - True True True True True True True True True True True True - True False True True] -# --- -# name: test_op_api_mda.41 - [False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False] -# --- -# name: test_op_api_mda.42 - [False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False False False False False False False False False - False False False False] -# --- -# name: test_op_api_mda.43 - [ True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True False False - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True True True True True True - True True True True True True True False True True True True - True True True True True True True True True True True True - True False True True] -# --- -# name: test_op_api_mda.44 - AttributeError("The selected attribute 'is_hetero' does not exist on the mesh.") -# --- -# name: test_op_api_mda.45 - AttributeError("The selected attribute 'is_carb' does not exist on the mesh.") -# --- -# name: test_op_api_mda.46 - AttributeError("The selected attribute 'bond_type' does not exist on the mesh.") -# --- -# name: test_op_api_mda.47 - [12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. - 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 0. 0. - 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. - 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. - 12. 12. 12. 12. 12. 12. 12. 0. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. - 12. 12. 12. 12. 12. 12. 12. 0. 12. 12.] -# --- -# name: test_op_api_mda.5 - [ 99 590 319 46 2 178 572 454 389 28 332 594 241 503 115 235 323 108 - 516 408 114 441 499 305 541 115 240 354 119 56 245 438 592 236 624 614 - 35 440 298 522 370 435 146 110 608 243 143 326 380 239 462 588 271 169 - 256 16 230 206 22 405 373 456 459 473 352 155 594 66 226 514 484 117 - 537 299 109 542 544 462 94 625 519 573 369 497 105 234 324 549 593 210 - 24 28 151 306 439 229 312 613 549 401] -# --- -# name: test_op_api_mda.6 - [ 7 8 17 9 19 17 3 14 17 12 9 14 11 7 8 6 8 17 7 11 3 5 6 7 - 3 6 10 13 2 9 7 5 15 5 41 42 8 3 5 16 3 5 16 5 11 15 17 10 - 10 5 11 11 6 8 9 3 0 9 7 0 8 11 18 5 19 6 14 9 2 12 7 4 - 5 5 18 8 5 10 12 43 8 6 4 10 5 12 6 12 12 15 12 12 10 5 4 5 - 19 43 13 3] -# --- -# name: test_op_api_mda.7 - [6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 0 6 - 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 - 6 6 6 6 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 6 6] -# --- -# name: test_op_api_mda.8 - [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] -# --- -# name: test_op_api_mda.9 - AttributeError("The selected attribute 'entity_id' does not exist on the mesh.") -# --- -# name: test_op_local[bcif-1BNA] - [[ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.1 -0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.3 0.3] - [ 0.1 0.2 0.0] - [ 0.2 0.3 0.3] - [ 0.2 0.3 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 -0.0] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 -0.1] - [ 0.1 0.2 0.3] - [ 0.1 0.1 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.0] - [ 0.2 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.1 0.3 -0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.3 0.2] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.1] - [ 0.3 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.3 0.1] - [ 0.1 0.1 0.1] - [ 0.2 0.2 0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.3 0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.1 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.2 0.1 -0.0] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.3 0.1 -0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.2 0.3 0.1] - [ 0.2 0.1 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.3] - [ 0.3 0.2 0.0] - [ 0.1 0.3 -0.1]] -# --- -# name: test_op_local[bcif-1BNA].1 - [[ 4.1e-02 -7.4e-02 7.3e-02] - [ 7.4e-02 4.9e-02 6.6e-02] - [ 2.2e-02 -1.0e-01 -1.4e-01] - [ 4.6e-02 4.6e-02 1.3e-01] - [ 4.3e-02 1.3e-01 1.7e-01] - [-8.7e-02 1.7e-02 -4.1e-02] - [ 2.2e-02 4.3e-02 1.8e-01] - [ 2.7e-02 4.2e-02 4.0e-03] - [ 5.4e-02 2.8e-02 -8.4e-02] - [ 7.5e-02 6.2e-02 1.4e-01] - [ 6.5e-03 -4.8e-02 -1.5e-01] - [ 6.1e-03 -9.1e-02 3.4e-02] - [-1.9e-02 6.4e-02 -1.5e-01] - [-8.2e-02 3.2e-03 1.1e-01] - [ 3.8e-03 5.0e-02 -9.6e-02] - [ 2.8e-03 -4.3e-03 5.3e-02] - [-2.0e-02 -1.7e-02 -1.2e-01] - [-2.0e-02 -7.0e-02 -1.4e-01] - [ 1.7e-02 -4.1e-02 6.0e-02] - [-3.1e-02 1.4e-02 1.3e-01] - [ 5.1e-02 6.1e-02 -6.3e-02] - [ 2.4e-02 2.2e-03 4.4e-02] - [-1.9e-02 5.2e-02 -1.3e-02] - [-1.1e-02 2.9e-02 7.9e-02] - [-5.0e-02 -2.6e-02 -1.8e-01] - [-3.7e-03 -1.5e-02 1.7e-01] - [-2.1e-02 -1.0e-01 -8.6e-02] - [-3.0e-02 6.0e-03 -1.2e-01] - [-5.2e-03 -6.3e-02 -1.0e-01] - [ 1.1e-02 -2.9e-02 5.8e-02] - [ 9.4e-02 -6.9e-03 1.0e-01] - [-4.1e-03 6.1e-02 -1.5e-01] - [-2.9e-02 6.2e-02 -1.5e-02] - [-5.9e-03 7.1e-02 1.3e-01] - [-1.2e-02 -6.4e-03 -1.2e-01] - [-7.2e-02 -4.0e-03 -1.8e-01] - [ 1.1e-01 -8.1e-02 1.0e-01] - [ 3.5e-02 6.5e-02 1.3e-01] - [-9.2e-02 6.4e-02 1.8e-03] - [-3.8e-02 -8.0e-02 -1.8e-01] - [ 5.9e-03 2.0e-02 1.1e-01] - [ 3.8e-02 -2.7e-02 -8.4e-02] - [-8.9e-03 9.7e-02 -3.3e-02] - [-8.0e-02 -7.0e-02 3.5e-02] - [ 3.0e-02 -3.9e-02 5.5e-02] - [ 1.5e-02 -8.7e-02 5.7e-03] - [-1.9e-02 7.6e-02 -1.4e-01] - [-2.5e-02 -2.2e-02 2.9e-02] - [-1.9e-02 -3.6e-02 -1.5e-01] - [ 4.5e-03 4.9e-03 -9.2e-02] - [-1.7e-02 5.7e-03 -1.2e-01] - [-6.1e-02 5.1e-02 1.8e-02] - [ 1.8e-02 8.2e-02 1.1e-01] - [ 5.2e-02 1.4e-02 -2.0e-01] - [-9.3e-02 -3.0e-02 -1.0e-02] - [ 7.1e-02 -2.7e-02 -9.9e-02] - [-4.3e-02 -6.9e-02 4.4e-02] - [-6.5e-02 -1.4e-02 1.2e-01] - [-8.7e-03 4.5e-03 1.3e-01] - [-3.9e-02 -2.9e-02 1.7e-01] - [ 1.6e-02 1.3e-02 -2.4e-02] - [-5.3e-02 6.1e-02 8.2e-02] - [ 4.3e-02 1.0e-01 1.4e-01] - [ 3.7e-02 -3.9e-02 -4.0e-02] - [-1.1e-02 1.8e-02 4.7e-02] - [ 1.3e-02 -7.6e-02 6.9e-02] - [ 3.4e-02 8.7e-02 1.6e-01] - [ 5.1e-02 2.9e-02 -6.0e-02] - [-5.6e-02 3.0e-02 -8.6e-02] - [ 4.3e-02 -8.5e-02 -1.3e-01] - [-1.7e-02 5.4e-03 1.7e-01] - [ 7.9e-02 -5.5e-02 -5.0e-02] - [ 3.0e-04 -1.7e-02 -8.4e-02] - [-6.0e-03 -3.6e-02 -7.6e-02] - [-2.8e-02 -2.9e-02 -4.3e-02] - [-3.8e-02 1.7e-02 -1.2e-01] - [-5.1e-02 5.7e-05 -1.1e-01] - [-6.5e-03 -6.9e-02 -1.4e-01] - [ 1.5e-03 -8.3e-03 -1.2e-01] - [-8.3e-02 3.3e-03 -3.8e-02] - [ 6.6e-02 -4.8e-02 8.3e-02] - [ 2.5e-02 6.0e-02 -6.4e-02] - [ 1.1e-01 -8.3e-02 -1.1e-01] - [ 5.6e-02 5.5e-02 1.3e-01] - [ 1.5e-02 -7.2e-03 5.0e-02] - [-9.6e-03 -1.6e-03 -1.5e-01] - [ 7.5e-02 -4.1e-02 -1.0e-01] - [ 5.0e-02 8.5e-02 -2.7e-02] - [ 4.1e-02 -7.2e-02 2.9e-02] - [ 5.5e-02 1.9e-02 1.1e-01] - [ 5.4e-02 2.3e-02 -1.7e-01] - [-6.8e-02 -4.4e-02 2.9e-02] - [-7.6e-02 3.8e-04 9.8e-02] - [ 8.7e-02 5.5e-03 1.0e-01] - [-5.4e-03 -7.1e-04 1.6e-01] - [ 7.9e-02 -7.1e-03 -8.7e-02] - [-5.6e-02 -4.9e-02 -7.6e-02] - [-5.2e-02 -2.4e-02 1.7e-01] - [ 1.2e-01 2.8e-02 -7.4e-02] - [-2.5e-02 4.2e-02 -1.9e-01]] -# --- -# name: test_op_local[bcif-4ozs] - [[ 0.3 -0.0 0.3] - [ 0.5 0.2 -0.0] - [ 0.2 -0.0 0.2] - [ 0.3 0.1 -0.1] - [ 0.5 0.1 -0.0] - [ 0.4 0.1 -0.2] - [ 0.4 0.1 -0.0] - [ 0.4 -0.2 0.2] - [ 0.2 -0.0 0.4] - [ 0.2 0.0 0.2] - [ 0.2 0.0 0.1] - [ 0.3 0.1 0.2] - [ 0.4 0.1 -0.1] - [ 0.3 0.0 0.0] - [ 0.2 -0.0 0.2] - [ 0.4 0.1 0.1] - [ 0.3 0.0 0.1] - [ 0.3 -0.1 0.2] - [ 0.4 -0.1 0.2] - [ 0.5 0.2 0.1] - [ 0.4 0.2 -0.0] - [ 0.4 0.2 0.1] - [ 0.3 -0.0 0.2] - [ 0.3 -0.1 0.2] - [ 0.3 0.1 0.0] - [ 0.3 -0.1 0.3] - [ 0.4 0.3 -0.1] - [ 0.5 0.2 -0.1] - [ 0.3 0.0 0.2] - [ 0.2 0.1 0.2] - [ 0.4 0.2 -0.1] - [ 0.2 0.1 0.1] - [ 0.3 -0.0 0.1] - [ 0.3 0.2 -0.1] - [ 0.3 0.0 0.2] - [ 0.4 0.1 0.1] - [ 0.2 -0.1 0.2] - [ 0.3 0.1 0.1] - [ 0.4 0.2 -0.1] - [ 0.5 0.1 0.0] - [ 0.3 -0.0 0.4] - [ 0.4 0.2 0.1] - [ 0.3 -0.2 0.2] - [ 0.2 0.0 0.1] - [ 0.2 -0.0 0.2] - [ 0.4 0.2 0.1] - [ 0.1 -0.1 0.2] - [ 0.3 -0.0 0.3] - [ 0.3 -0.2 0.2] - [ 0.2 -0.1 0.1] - [ 0.5 0.1 -0.1] - [ 0.3 -0.2 0.2] - [ 0.2 0.1 0.1] - [ 0.3 0.2 -0.0] - [ 0.2 -0.1 0.4] - [ 0.3 0.0 0.2] - [ 0.4 0.0 0.1] - [ 0.2 0.1 0.1] - [ 0.3 -0.0 0.4] - [ 0.4 0.2 -0.2] - [ 0.4 0.2 -0.1] - [ 0.2 -0.1 0.1] - [ 0.2 -0.2 0.3] - [ 0.2 -0.1 0.1] - [ 0.4 0.2 0.1] - [ 0.4 0.2 -0.2] - [ 0.3 -0.1 0.3] - [ 0.3 0.0 0.0] - [ 0.3 0.1 0.2] - [ 0.4 0.2 0.1] - [ 0.2 0.1 0.0] - [ 0.2 0.0 0.2] - [ 0.3 0.1 0.0] - [ 0.3 0.1 -0.1] - [ 0.3 -0.1 0.4] - [ 0.4 0.1 0.1] - [ 0.2 -0.1 0.1] - [ 0.5 0.1 -0.1] - [ 0.4 0.2 0.1] - [ 0.4 0.1 0.0] - [ 0.4 0.1 -0.1] - [ 0.3 -0.2 0.2] - [ 0.2 0.1 0.2] - [ 0.3 -0.0 0.3] - [ 0.6 0.2 -0.0] - [ 0.3 -0.1 0.3] - [ 0.3 -0.1 0.3] - [ 0.3 0.1 0.1] - [ 0.2 0.0 0.1] - [ 0.2 0.0 0.1] - [ 0.3 -0.1 0.1] - [ 0.2 0.0 0.0] - [ 0.3 0.0 0.1] - [ 0.3 0.1 -0.1] - [ 0.2 -0.1 0.4] - [ 0.2 0.0 0.2] - [ 0.5 0.1 0.0] - [ 0.4 0.1 0.1] - [ 0.3 -0.0 0.2] - [ 0.2 -0.0 0.3]] -# --- -# name: test_op_local[bcif-4ozs].1 - [[-3.2e-02 -6.2e-02 2.2e-01] - [ 1.3e-01 1.4e-01 -1.3e-01] - [-1.1e-01 -5.9e-02 1.0e-01] - [-5.4e-02 2.2e-02 -1.6e-01] - [ 1.4e-01 2.3e-02 -1.2e-01] - [ 1.0e-01 7.9e-02 -2.7e-01] - [ 6.4e-02 6.0e-02 -1.3e-01] - [ 5.0e-02 -2.6e-01 9.3e-02] - [-6.8e-02 -6.1e-02 2.6e-01] - [-1.1e-01 -2.3e-02 1.3e-01] - [-6.9e-02 -7.8e-03 -1.9e-02] - [ 3.1e-02 7.6e-02 9.7e-02] - [ 1.2e-01 3.4e-02 -1.7e-01] - [-3.3e-02 -4.1e-02 -6.7e-02] - [-9.3e-02 -8.0e-02 9.4e-02] - [ 3.8e-02 7.9e-02 9.2e-03] - [-4.8e-02 -2.8e-02 6.8e-03] - [ 2.9e-02 -1.3e-01 1.1e-01] - [ 4.4e-02 -1.5e-01 1.0e-01] - [ 1.5e-01 1.1e-01 -2.7e-02] - [ 5.0e-02 1.2e-01 -1.4e-01] - [ 1.2e-01 1.3e-01 -2.9e-02] - [-4.5e-02 -9.3e-02 1.4e-01] - [ 9.1e-03 -1.2e-01 1.4e-01] - [-4.4e-02 4.1e-02 -9.5e-02] - [-4.6e-02 -1.6e-01 2.2e-01] - [ 5.3e-02 2.2e-01 -1.8e-01] - [ 1.6e-01 1.0e-01 -1.8e-01] - [-2.3e-03 -3.0e-02 6.4e-02] - [-8.1e-02 7.1e-02 1.1e-01] - [ 5.6e-02 1.2e-01 -1.5e-01] - [-1.2e-01 2.9e-02 -1.0e-02] - [ 1.7e-02 -5.6e-02 5.5e-03] - [-5.1e-02 1.1e-01 -1.7e-01] - [-3.4e-02 -1.9e-02 1.4e-01] - [ 5.2e-02 9.8e-02 1.8e-02] - [-8.3e-02 -1.8e-01 1.3e-01] - [ 2.8e-02 1.4e-02 -2.1e-02] - [ 8.4e-02 1.9e-01 -1.6e-01] - [ 1.4e-01 5.1e-02 -9.8e-02] - [-6.2e-02 -9.0e-02 2.8e-01] - [ 4.4e-02 1.5e-01 4.0e-03] - [ 2.7e-03 -2.2e-01 9.1e-02] - [-9.6e-02 -3.0e-02 2.9e-02] - [-9.9e-02 -8.0e-02 7.3e-02] - [ 1.3e-01 1.4e-01 -4.0e-02] - [-1.7e-01 -1.1e-01 5.9e-02] - [-4.6e-02 -8.5e-02 2.4e-01] - [-3.3e-02 -2.4e-01 1.3e-01] - [-9.8e-02 -1.0e-01 4.6e-02] - [ 1.5e-01 5.5e-02 -1.7e-01] - [-4.7e-02 -2.1e-01 1.2e-01] - [-1.2e-01 2.5e-02 4.3e-03] - [-5.8e-02 1.2e-01 -1.3e-01] - [-8.6e-02 -1.8e-01 2.8e-01] - [-4.8e-02 -8.6e-03 5.3e-02] - [ 4.1e-02 -1.9e-03 3.2e-02] - [-1.0e-01 7.6e-03 -6.2e-03] - [-6.6e-02 -9.9e-02 2.8e-01] - [ 1.3e-01 1.7e-01 -2.5e-01] - [ 9.8e-02 1.3e-01 -1.6e-01] - [-1.2e-01 -1.0e-01 4.0e-02] - [-8.6e-02 -2.1e-01 1.8e-01] - [-8.0e-02 -1.1e-01 -5.9e-03] - [ 4.8e-02 1.3e-01 3.5e-03] - [ 7.0e-02 1.6e-01 -2.6e-01] - [-4.8e-02 -1.4e-01 2.1e-01] - [-3.1e-02 -8.5e-03 -8.5e-02] - [ 5.9e-03 3.4e-02 7.2e-02] - [ 4.6e-02 1.2e-01 -2.1e-04] - [-1.5e-01 1.6e-02 -7.4e-02] - [-1.5e-01 -3.3e-02 1.1e-01] - [-8.0e-03 9.8e-02 -7.8e-02] - [ 7.3e-03 3.8e-02 -1.6e-01] - [-3.4e-02 -1.4e-01 2.8e-01] - [ 4.6e-02 9.2e-02 -3.4e-02] - [-9.3e-02 -1.3e-01 6.8e-03] - [ 1.4e-01 5.3e-02 -2.2e-01] - [ 9.7e-02 1.0e-01 1.8e-02] - [ 7.3e-02 3.8e-02 -5.7e-02] - [ 1.1e-01 9.5e-02 -2.2e-01] - [-5.2e-02 -2.7e-01 1.3e-01] - [-6.8e-02 7.9e-02 8.1e-02] - [ 5.0e-03 -8.2e-02 1.5e-01] - [ 2.4e-01 1.1e-01 -1.0e-01] - [-5.3e-02 -1.5e-01 1.7e-01] - [-6.3e-02 -1.7e-01 1.8e-01] - [ 3.3e-02 3.4e-02 2.5e-02] - [-1.3e-01 -1.7e-03 -4.4e-02] - [-1.2e-01 -2.3e-02 1.0e-02] - [-4.8e-02 -1.6e-01 1.8e-02] - [-9.1e-02 -2.4e-02 -7.9e-02] - [-9.9e-03 -3.3e-02 -2.2e-02] - [ 3.3e-02 9.9e-02 -2.2e-01] - [-9.7e-02 -1.2e-01 2.5e-01] - [-8.0e-02 -3.2e-02 7.5e-02] - [ 2.0e-01 3.5e-02 -9.4e-02] - [ 1.2e-01 6.5e-02 -7.1e-03] - [-1.6e-02 -9.4e-02 6.7e-02] - [-1.1e-01 -7.9e-02 2.1e-01]] -# --- -# name: test_op_local[bcif-8H1B] - [[-0.1 0.3 0.3] - [-0.2 0.2 0.3] - [ 0.2 -0.3 0.2] - [ 0.1 0.2 0.3] - [ 0.1 0.0 0.3] - [-0.2 0.0 0.2] - [ 0.1 0.2 0.1] - [ 0.0 -0.1 0.5] - [-0.1 -0.2 0.2] - [-0.0 0.2 0.2] - [ 0.2 -0.1 0.2] - [ 0.1 0.0 0.2] - [ 0.2 0.0 0.2] - [-0.3 -0.1 -0.0] - [-0.0 0.1 0.3] - [ 0.1 -0.0 0.1] - [ 0.3 -0.2 0.2] - [-0.1 0.2 0.1] - [-0.1 -0.1 -0.0] - [ 0.1 -0.1 0.3] - [-0.0 0.1 0.3] - [ 0.1 -0.1 0.3] - [ 0.1 -0.0 0.6] - [ 0.2 -0.2 0.0] - [-0.1 -0.0 -0.1] - [-0.1 0.1 0.3] - [ 0.1 0.0 0.1] - [ 0.0 -0.2 0.2] - [-0.1 0.1 0.4] - [-0.1 0.3 0.2] - [ 0.2 -0.0 0.1] - [ 0.1 -0.1 0.3] - [-0.1 0.0 0.5] - [ 0.1 -0.0 0.1] - [-0.1 -0.1 0.2] - [-0.0 0.2 0.4] - [ 0.2 -0.1 0.3] - [ 0.2 -0.1 -0.1] - [ 0.0 -0.1 0.1] - [ 0.2 -0.1 0.2] - [ 0.0 -0.1 0.2] - [-0.1 0.2 0.2] - [-0.0 0.2 0.2] - [-0.0 -0.0 0.1] - [ 0.2 -0.0 0.2] - [-0.1 0.2 0.2] - [ 0.3 -0.1 0.1] - [-0.0 -0.1 0.2] - [ 0.1 -0.0 0.1] - [ 0.0 0.0 0.5] - [-0.0 0.3 0.2] - [ 0.2 -0.0 0.0] - [-0.1 -0.0 0.4] - [ 0.1 -0.2 0.0] - [ 0.0 0.1 0.2] - [-0.0 -0.0 0.1] - [ 0.0 -0.1 0.4] - [-0.0 0.1 0.2] - [ 0.1 -0.1 0.3] - [ 0.2 -0.0 0.2] - [ 0.0 -0.1 0.5] - [-0.0 -0.0 0.5] - [-0.0 0.0 0.4] - [ 0.0 -0.2 0.1] - [-0.0 0.1 0.2] - [ 0.2 -0.3 0.2] - [-0.1 0.2 0.4] - [-0.0 0.1 0.2] - [-0.1 -0.1 -0.0] - [ 0.1 0.0 0.4] - [-0.1 0.1 0.4] - [-0.1 -0.0 0.0] - [ 0.2 -0.1 -0.0] - [-0.1 0.2 0.2] - [-0.1 -0.0 -0.1] - [-0.1 -0.1 -0.1] - [-0.0 0.0 0.5] - [-0.2 0.2 0.3] - [-0.0 -0.1 -0.0] - [-0.0 0.0 0.4] - [ 0.2 -0.1 0.2] - [ 0.1 0.0 0.6] - [-0.1 0.3 0.2] - [ 0.1 -0.0 0.1] - [ 0.3 -0.2 0.2] - [-0.2 -0.1 -0.1] - [-0.2 0.1 0.3] - [-0.0 0.0 0.3] - [ 0.0 0.2 0.2] - [-0.0 0.1 0.1] - [ 0.2 -0.2 0.0] - [ 0.2 -0.1 0.2] - [-0.0 -0.0 0.1] - [ 0.1 -0.2 0.1] - [-0.0 -0.3 0.2] - [-0.2 -0.1 -0.1] - [ 0.0 -0.2 0.2] - [ 0.1 -0.3 0.1] - [ 0.1 0.0 0.6] - [-0.1 -0.2 -0.0]] -# --- -# name: test_op_local[bcif-8H1B].1 - [[-1.6e-01 2.6e-01 9.2e-02] - [-2.1e-01 2.0e-01 4.2e-02] - [ 1.8e-01 -2.7e-01 -5.0e-02] - [ 5.1e-02 2.4e-01 5.9e-02] - [ 1.4e-01 1.4e-02 4.9e-02] - [-1.8e-01 2.3e-03 2.1e-02] - [ 5.1e-02 1.9e-01 -7.3e-02] - [ 2.6e-02 -6.8e-02 3.3e-01] - [-6.3e-02 -1.7e-01 -5.7e-02] - [-1.4e-02 2.5e-01 -1.0e-02] - [ 2.0e-01 -6.7e-02 -3.3e-02] - [ 1.0e-01 7.3e-03 -1.6e-02] - [ 1.4e-01 2.5e-03 -4.4e-02] - [-2.6e-01 -5.2e-02 -2.3e-01] - [-5.0e-02 1.1e-01 1.1e-01] - [ 8.0e-02 -2.1e-02 -1.1e-01] - [ 2.7e-01 -1.8e-01 -4.5e-02] - [-9.1e-02 2.5e-01 -8.5e-02] - [-1.0e-01 -1.3e-01 -2.4e-01] - [ 9.8e-02 -9.0e-02 1.3e-01] - [-5.3e-02 1.1e-01 8.6e-02] - [ 1.3e-01 -5.0e-02 6.8e-02] - [ 5.9e-02 -1.8e-02 3.5e-01] - [ 2.0e-01 -1.7e-01 -1.7e-01] - [-1.0e-01 -4.0e-02 -2.7e-01] - [-1.1e-01 1.4e-01 7.8e-02] - [ 1.3e-01 9.9e-03 -9.8e-02] - [ 1.1e-02 -2.4e-01 -2.4e-02] - [-6.2e-02 6.4e-02 2.2e-01] - [-9.4e-02 2.9e-01 2.4e-02] - [ 1.7e-01 -4.3e-02 -7.9e-02] - [ 1.4e-01 -8.8e-02 4.3e-02] - [-8.6e-02 4.0e-02 2.5e-01] - [ 6.9e-02 -3.6e-02 -1.6e-01] - [-1.0e-01 -8.7e-02 -2.1e-02] - [-3.2e-02 1.8e-01 1.8e-01] - [ 1.4e-01 -7.8e-02 6.4e-02] - [ 1.9e-01 -1.1e-01 -2.7e-01] - [-4.3e-03 -1.1e-01 -1.6e-01] - [ 2.1e-01 -8.2e-02 -3.8e-03] - [ 1.5e-02 -9.5e-02 -8.6e-03] - [-1.5e-01 1.9e-01 -3.0e-02] - [-4.9e-02 1.9e-01 -3.8e-02] - [-4.3e-02 -1.7e-02 -1.1e-01] - [ 1.7e-01 -2.4e-02 -4.9e-02] - [-1.5e-01 1.7e-01 1.5e-02] - [ 2.5e-01 -1.4e-01 -1.0e-01] - [-2.1e-02 -1.2e-01 -5.5e-02] - [ 1.1e-01 -4.1e-02 -9.1e-02] - [ 3.1e-02 4.1e-02 3.1e-01] - [-2.5e-02 3.1e-01 -2.7e-02] - [ 2.3e-01 -2.7e-02 -1.8e-01] - [-9.3e-02 -2.4e-02 1.9e-01] - [ 8.5e-02 -1.6e-01 -1.7e-01] - [ 1.4e-02 1.0e-01 -7.8e-03] - [-2.2e-02 -2.9e-02 -7.3e-02] - [-4.0e-03 -6.6e-02 2.0e-01] - [-1.3e-02 1.5e-01 -4.4e-02] - [ 5.6e-02 -1.2e-01 1.0e-01] - [ 1.7e-01 -3.5e-02 2.3e-02] - [-2.6e-03 -7.1e-02 2.9e-01] - [-3.4e-02 -1.5e-02 2.9e-01] - [-4.3e-02 4.4e-02 1.9e-01] - [ 2.2e-02 -1.9e-01 -1.0e-01] - [-5.0e-02 1.0e-01 3.0e-02] - [ 2.1e-01 -2.7e-01 -3.8e-02] - [-7.2e-02 2.5e-01 1.9e-01] - [-2.2e-02 7.1e-02 -4.7e-02] - [-1.3e-01 -1.2e-01 -2.6e-01] - [ 1.1e-01 2.0e-02 1.8e-01] - [-8.7e-02 9.1e-02 1.5e-01] - [-9.3e-02 -1.4e-03 -2.0e-01] - [ 2.2e-01 -8.6e-02 -2.6e-01] - [-8.7e-02 2.1e-01 -1.5e-02] - [-1.1e-01 -3.1e-02 -2.7e-01] - [-1.2e-01 -8.5e-02 -3.4e-01] - [-2.4e-02 3.9e-02 2.8e-01] - [-1.6e-01 2.1e-01 7.2e-02] - [-5.8e-02 -1.3e-01 -2.2e-01] - [-3.9e-02 1.4e-02 1.5e-01] - [ 1.6e-01 -1.2e-01 8.9e-05] - [ 4.5e-02 2.2e-02 3.8e-01] - [-1.3e-01 2.5e-01 -3.5e-02] - [ 5.2e-02 -3.6e-02 -8.9e-02] - [ 2.8e-01 -2.0e-01 -4.4e-02] - [-1.8e-01 -1.2e-01 -3.4e-01] - [-2.3e-01 5.8e-02 5.4e-02] - [-2.7e-02 1.8e-02 9.5e-02] - [-1.2e-03 1.9e-01 -2.1e-02] - [-5.8e-02 1.5e-01 -7.6e-02] - [ 1.6e-01 -1.9e-01 -1.8e-01] - [ 1.7e-01 -1.1e-01 3.8e-02] - [-2.2e-02 -5.0e-03 -1.6e-01] - [ 7.1e-02 -2.0e-01 -9.2e-02] - [-1.0e-02 -2.6e-01 -3.5e-02] - [-1.8e-01 -1.4e-01 -3.3e-01] - [ 3.7e-02 -1.7e-01 2.9e-02] - [ 1.2e-01 -2.7e-01 -1.1e-01] - [ 6.0e-02 2.0e-02 4.2e-01] - [-1.4e-01 -1.5e-01 -2.3e-01]] -# --- -# name: test_op_local[bcif-8U8W] - [[-0.2 -0.2 0.1] - [-0.3 -0.0 0.3] - [-0.3 -0.1 0.2] - [-0.4 0.0 0.1] - [-0.4 -0.1 0.3] - [-0.2 0.2 0.2] - [-0.3 0.0 0.3] - [-0.3 -0.3 0.1] - [-0.4 -0.1 0.2] - [-0.2 0.0 0.0] - [-0.3 0.1 -0.0] - [-0.3 -0.1 0.3] - [-0.5 0.1 0.1] - [-0.2 -0.2 0.2] - [-0.4 0.1 0.2] - [-0.2 -0.0 0.1] - [-0.2 -0.2 0.2] - [-0.3 -0.3 0.2] - [-0.4 -0.0 0.2] - [-0.4 0.1 0.2] - [-0.5 0.1 0.1] - [-0.2 -0.2 0.2] - [-0.4 -0.0 0.1] - [-0.2 0.0 0.2] - [-0.4 -0.0 0.2] - [-0.1 -0.0 0.0] - [-0.3 0.2 -0.0] - [-0.4 -0.1 0.2] - [-0.3 -0.1 0.1] - [-0.2 -0.1 0.1] - [-0.3 0.1 0.2] - [-0.2 -0.1 0.1] - [-0.4 -0.1 0.2] - [-0.5 0.1 0.2] - [-0.4 0.1 0.1] - [-0.4 -0.0 0.2] - [-0.3 -0.1 0.4] - [-0.5 -0.0 0.2] - [-0.5 0.0 0.2] - [-0.3 -0.1 0.1] - [-0.3 -0.2 0.3] - [-0.4 0.1 0.2] - [-0.4 -0.1 0.2] - [-0.3 0.0 -0.0] - [-0.4 -0.2 0.3] - [-0.4 -0.2 0.3] - [-0.2 -0.3 0.1] - [-0.3 -0.1 0.0] - [-0.3 0.2 0.3] - [-0.2 -0.1 0.4] - [-0.1 -0.1 0.0] - [-0.3 0.1 0.1] - [-0.3 -0.0 0.1] - [-0.3 0.2 0.0] - [-0.3 0.0 0.3] - [-0.4 -0.1 0.2] - [-0.3 -0.2 0.3] - [-0.4 -0.3 0.1] - [-0.5 0.1 0.2] - [-0.3 -0.0 0.3] - [-0.3 0.2 -0.0] - [-0.5 0.0 0.1] - [-0.3 0.0 0.1] - [-0.4 0.1 0.1] - [-0.2 0.1 0.1] - [-0.3 -0.2 0.2] - [-0.4 0.2 0.2] - [-0.2 0.0 0.3] - [-0.3 -0.1 0.0] - [-0.5 0.1 0.2] - [-0.4 -0.2 0.1] - [-0.2 0.1 0.1] - [-0.3 0.1 0.3] - [-0.4 0.0 0.3] - [-0.2 0.0 0.2] - [-0.2 0.1 0.1] - [-0.2 -0.1 0.2] - [-0.3 -0.2 0.1] - [-0.5 0.0 0.3] - [-0.3 0.1 0.1] - [-0.2 0.0 0.0] - [-0.2 0.1 0.1] - [-0.3 -0.3 0.1] - [-0.2 -0.1 0.2] - [-0.4 0.2 0.1] - [-0.3 -0.0 0.4] - [-0.3 -0.2 0.2] - [-0.3 -0.1 0.3] - [-0.3 0.0 0.3] - [-0.1 -0.0 0.1] - [-0.3 0.1 0.4] - [-0.2 -0.1 0.2] - [-0.5 -0.0 0.2] - [-0.2 -0.1 0.1] - [-0.3 0.2 0.3] - [-0.4 -0.0 0.2] - [-0.3 -0.2 0.3] - [-0.2 -0.2 0.1] - [-0.3 -0.1 0.1] - [-0.2 0.1 0.1]] + [0.8 0.2 0.6] + [0.5 0.4 0.5] + [1.2 0.4 0.7] + [1.1 0.4 0.4]] # --- -# name: test_op_local[bcif-8U8W].1 - [[ 9.4e-02 -1.6e-01 -9.6e-02] - [ 5.5e-02 7.9e-03 8.1e-02] - [ 4.1e-02 -1.3e-01 4.2e-02] - [-7.1e-02 1.7e-02 -6.5e-02] - [-1.2e-01 -1.3e-01 1.2e-01] - [ 1.1e-01 1.9e-01 -2.0e-02] - [-7.1e-03 6.0e-02 8.0e-02] - [-7.2e-03 -2.6e-01 -6.0e-02] - [-4.0e-02 -1.2e-01 6.5e-03] - [ 1.0e-01 4.3e-02 -1.5e-01] - [ 7.5e-03 1.1e-01 -2.2e-01] - [ 3.4e-02 -4.4e-02 7.2e-02] - [-1.4e-01 7.6e-02 -1.3e-01] - [ 7.5e-02 -2.1e-01 5.1e-02] - [-1.2e-01 1.1e-01 -7.5e-03] - [ 1.3e-01 1.3e-02 -6.9e-02] - [ 6.8e-02 -2.3e-01 -6.4e-03] - [ 5.8e-02 -2.7e-01 3.0e-02] - [-8.3e-02 -2.3e-02 5.5e-02] - [-7.1e-02 1.0e-01 2.9e-02] - [-1.5e-01 1.5e-01 -1.1e-01] - [ 1.6e-01 -1.8e-01 -2.7e-02] - [-1.2e-01 4.5e-03 -6.9e-02] - [ 1.5e-01 5.3e-02 3.3e-02] - [-6.5e-02 -1.2e-02 9.6e-03] - [ 2.2e-01 -2.6e-04 -1.8e-01] - [ 6.6e-02 1.7e-01 -2.0e-01] - [-8.0e-02 -7.1e-02 4.4e-02] - [-4.8e-03 -5.1e-02 -1.1e-01] - [ 1.6e-01 -3.5e-02 -8.7e-02] - [-5.8e-03 1.4e-01 3.3e-02] - [ 1.1e-01 -1.3e-01 -1.1e-01] - [-6.8e-02 -9.1e-02 5.0e-02] - [-1.5e-01 8.5e-02 -1.7e-02] - [-7.1e-02 1.5e-01 -5.7e-02] - [-1.0e-01 1.3e-02 1.8e-02] - [-2.1e-02 -4.8e-02 2.1e-01] - [-1.6e-01 2.3e-04 5.3e-02] - [-1.4e-01 3.0e-02 8.9e-03] - [ 3.0e-02 -5.2e-02 -5.3e-02] - [ 1.4e-02 -1.9e-01 6.8e-02] - [-9.2e-02 8.3e-02 -8.4e-03] - [-1.1e-01 -1.1e-01 1.3e-02] - [-2.2e-03 3.5e-02 -2.0e-01] - [-6.7e-02 -1.6e-01 6.9e-02] - [-4.7e-02 -1.4e-01 1.2e-01] - [ 7.9e-02 -2.6e-01 -7.8e-02] - [ 3.8e-02 -5.1e-02 -1.4e-01] - [-9.6e-03 2.1e-01 1.5e-01] - [ 9.5e-02 -6.9e-02 1.9e-01] - [ 1.8e-01 -6.1e-02 -1.7e-01] - [ 2.1e-02 9.3e-02 -5.2e-02] - [-2.6e-02 -1.9e-02 -1.0e-01] - [ 2.1e-02 1.8e-01 -1.8e-01] - [-2.1e-02 3.6e-02 1.1e-01] - [-4.1e-02 -4.4e-02 2.8e-02] - [-1.1e-02 -1.7e-01 1.1e-01] - [-5.4e-02 -2.7e-01 -4.5e-02] - [-1.8e-01 6.7e-02 -1.2e-02] - [-5.9e-03 -4.6e-03 1.4e-01] - [ 5.2e-02 2.1e-01 -2.0e-01] - [-1.5e-01 4.9e-02 -6.1e-02] - [-1.1e-02 3.4e-02 -1.3e-01] - [-1.0e-01 8.4e-02 -4.6e-02] - [ 9.9e-02 9.9e-02 -6.6e-02] - [ 3.6e-02 -1.6e-01 3.4e-02] - [-1.1e-01 1.9e-01 -3.8e-03] - [ 1.2e-01 3.4e-02 8.8e-02] - [ 4.8e-02 -4.5e-02 -1.7e-01] - [-1.8e-01 1.3e-01 -2.1e-02] - [-1.0e-01 -2.2e-01 -3.7e-02] - [ 1.2e-01 1.5e-01 -4.0e-02] - [ 4.2e-03 1.1e-01 6.6e-02] - [-8.5e-02 5.6e-02 1.3e-01] - [ 6.9e-02 4.8e-02 2.4e-02] - [ 8.9e-02 1.4e-01 -1.2e-01] - [ 1.5e-01 -1.1e-01 3.4e-02] - [ 5.1e-02 -1.8e-01 -9.3e-02] - [-1.6e-01 2.4e-02 1.4e-01] - [-7.8e-03 7.2e-02 -5.8e-02] - [ 1.3e-01 4.6e-02 -1.8e-01] - [ 7.4e-02 7.9e-02 -1.2e-01] - [-3.3e-02 -2.4e-01 -4.5e-02] - [ 7.8e-02 -6.8e-02 2.8e-03] - [-8.5e-02 2.2e-01 -1.1e-01] - [ 5.0e-02 1.5e-02 1.7e-01] - [ 6.5e-02 -2.0e-01 5.1e-02] - [ 5.7e-02 -9.1e-02 1.4e-01] - [ 1.4e-02 4.3e-02 1.2e-01] - [ 2.3e-01 3.7e-03 -1.1e-01] - [-3.2e-02 1.5e-01 1.7e-01] - [ 1.2e-01 -6.1e-02 -2.3e-02] - [-1.5e-01 -2.4e-02 5.4e-02] - [ 8.2e-02 -4.1e-02 -1.3e-01] - [-8.9e-03 1.9e-01 1.6e-01] - [-6.8e-02 3.0e-03 -9.8e-03] - [-2.2e-02 -2.1e-01 1.1e-01] - [ 1.2e-01 -1.6e-01 -1.4e-01] - [ 5.3e-02 -1.1e-01 -1.0e-01] - [ 8.9e-02 9.3e-02 -6.2e-02]] +# name: test_op_api_mda.39 + [ True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True False False + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True False True True True True + True True True True True True True True True True True True + True False True True] # --- -# name: test_op_local[cif-1BNA] - [[ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.1 -0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.3 0.3] - [ 0.1 0.2 0.0] - [ 0.2 0.3 0.3] - [ 0.2 0.3 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 -0.0] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 -0.1] - [ 0.1 0.2 0.3] - [ 0.1 0.1 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.0] - [ 0.2 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.1 0.3 -0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.3 0.2] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.1] - [ 0.3 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.3 0.1] - [ 0.1 0.1 0.1] - [ 0.2 0.2 0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.3 0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.1 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.2 0.1 -0.0] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.3 0.1 -0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.2 0.3 0.1] - [ 0.2 0.1 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.3] - [ 0.3 0.2 0.0] - [ 0.1 0.3 -0.1]] -# --- -# name: test_op_local[cif-1BNA].1 - [[ 4.1e-02 -7.4e-02 7.3e-02] - [ 7.4e-02 4.9e-02 6.6e-02] - [ 2.2e-02 -1.0e-01 -1.4e-01] - [ 4.6e-02 4.6e-02 1.3e-01] - [ 4.3e-02 1.3e-01 1.7e-01] - [-8.7e-02 1.7e-02 -4.1e-02] - [ 2.2e-02 4.3e-02 1.8e-01] - [ 2.7e-02 4.2e-02 4.0e-03] - [ 5.4e-02 2.8e-02 -8.4e-02] - [ 7.5e-02 6.2e-02 1.4e-01] - [ 6.5e-03 -4.8e-02 -1.5e-01] - [ 6.1e-03 -9.1e-02 3.4e-02] - [-1.9e-02 6.4e-02 -1.5e-01] - [-8.2e-02 3.2e-03 1.1e-01] - [ 3.8e-03 5.0e-02 -9.6e-02] - [ 2.8e-03 -4.3e-03 5.3e-02] - [-2.0e-02 -1.7e-02 -1.2e-01] - [-2.0e-02 -7.0e-02 -1.4e-01] - [ 1.7e-02 -4.1e-02 6.0e-02] - [-3.1e-02 1.4e-02 1.3e-01] - [ 5.1e-02 6.1e-02 -6.3e-02] - [ 2.4e-02 2.2e-03 4.4e-02] - [-1.9e-02 5.2e-02 -1.3e-02] - [-1.1e-02 2.9e-02 7.9e-02] - [-5.0e-02 -2.6e-02 -1.8e-01] - [-3.7e-03 -1.5e-02 1.7e-01] - [-2.1e-02 -1.0e-01 -8.6e-02] - [-3.0e-02 6.0e-03 -1.2e-01] - [-5.2e-03 -6.3e-02 -1.0e-01] - [ 1.1e-02 -2.9e-02 5.8e-02] - [ 9.4e-02 -6.9e-03 1.0e-01] - [-4.1e-03 6.1e-02 -1.5e-01] - [-2.9e-02 6.2e-02 -1.5e-02] - [-5.9e-03 7.1e-02 1.3e-01] - [-1.2e-02 -6.4e-03 -1.2e-01] - [-7.2e-02 -4.0e-03 -1.8e-01] - [ 1.1e-01 -8.1e-02 1.0e-01] - [ 3.5e-02 6.5e-02 1.3e-01] - [-9.2e-02 6.4e-02 1.8e-03] - [-3.8e-02 -8.0e-02 -1.8e-01] - [ 5.9e-03 2.0e-02 1.1e-01] - [ 3.8e-02 -2.7e-02 -8.4e-02] - [-8.9e-03 9.7e-02 -3.3e-02] - [-8.0e-02 -7.0e-02 3.5e-02] - [ 3.0e-02 -3.9e-02 5.5e-02] - [ 1.5e-02 -8.7e-02 5.7e-03] - [-1.9e-02 7.6e-02 -1.4e-01] - [-2.5e-02 -2.2e-02 2.9e-02] - [-1.9e-02 -3.6e-02 -1.5e-01] - [ 4.5e-03 4.9e-03 -9.2e-02] - [-1.7e-02 5.7e-03 -1.2e-01] - [-6.1e-02 5.1e-02 1.8e-02] - [ 1.8e-02 8.2e-02 1.1e-01] - [ 5.2e-02 1.4e-02 -2.0e-01] - [-9.3e-02 -3.0e-02 -1.0e-02] - [ 7.1e-02 -2.7e-02 -9.9e-02] - [-4.3e-02 -6.9e-02 4.4e-02] - [-6.5e-02 -1.4e-02 1.2e-01] - [-8.7e-03 4.5e-03 1.3e-01] - [-3.9e-02 -2.9e-02 1.7e-01] - [ 1.6e-02 1.3e-02 -2.4e-02] - [-5.3e-02 6.1e-02 8.2e-02] - [ 4.3e-02 1.0e-01 1.4e-01] - [ 3.7e-02 -3.9e-02 -4.0e-02] - [-1.1e-02 1.8e-02 4.7e-02] - [ 1.3e-02 -7.6e-02 6.9e-02] - [ 3.4e-02 8.7e-02 1.6e-01] - [ 5.1e-02 2.9e-02 -6.0e-02] - [-5.6e-02 3.0e-02 -8.6e-02] - [ 4.3e-02 -8.5e-02 -1.3e-01] - [-1.7e-02 5.4e-03 1.7e-01] - [ 7.9e-02 -5.5e-02 -5.0e-02] - [ 3.0e-04 -1.7e-02 -8.4e-02] - [-6.0e-03 -3.6e-02 -7.6e-02] - [-2.8e-02 -2.9e-02 -4.3e-02] - [-3.8e-02 1.7e-02 -1.2e-01] - [-5.1e-02 5.7e-05 -1.1e-01] - [-6.5e-03 -6.9e-02 -1.4e-01] - [ 1.5e-03 -8.3e-03 -1.2e-01] - [-8.3e-02 3.3e-03 -3.8e-02] - [ 6.6e-02 -4.8e-02 8.3e-02] - [ 2.5e-02 6.0e-02 -6.4e-02] - [ 1.1e-01 -8.3e-02 -1.1e-01] - [ 5.6e-02 5.5e-02 1.3e-01] - [ 1.5e-02 -7.2e-03 5.0e-02] - [-9.6e-03 -1.6e-03 -1.5e-01] - [ 7.5e-02 -4.1e-02 -1.0e-01] - [ 5.0e-02 8.5e-02 -2.7e-02] - [ 4.1e-02 -7.2e-02 2.9e-02] - [ 5.5e-02 1.9e-02 1.1e-01] - [ 5.4e-02 2.3e-02 -1.7e-01] - [-6.8e-02 -4.4e-02 2.9e-02] - [-7.6e-02 3.8e-04 9.8e-02] - [ 8.7e-02 5.5e-03 1.0e-01] - [-5.4e-03 -7.1e-04 1.6e-01] - [ 7.9e-02 -7.1e-03 -8.7e-02] - [-5.6e-02 -4.9e-02 -7.6e-02] - [-5.2e-02 -2.4e-02 1.7e-01] - [ 1.2e-01 2.8e-02 -7.4e-02] - [-2.5e-02 4.2e-02 -1.9e-01]] +# name: test_op_api_mda.4 + AttributeError("The selected attribute 'charge' does not exist on the mesh.") # --- -# name: test_op_local[cif-4ozs] +# name: test_op_api_mda.40 + [ True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True False False + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True False True True True True + True True True True True True True True True True True True + True False True True] +# --- +# name: test_op_api_mda.41 + [False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False] +# --- +# name: test_op_api_mda.42 + [False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False False False False False False False False False + False False False False] +# --- +# name: test_op_api_mda.43 + [ True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True False False + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True True True True True True + True True True True True True True False True True True True + True True True True True True True True True True True True + True False True True] +# --- +# name: test_op_api_mda.44 + AttributeError("The selected attribute 'is_hetero' does not exist on the mesh.") +# --- +# name: test_op_api_mda.45 + AttributeError("The selected attribute 'is_carb' does not exist on the mesh.") +# --- +# name: test_op_api_mda.46 + AttributeError("The selected attribute 'bond_type' does not exist on the mesh.") +# --- +# name: test_op_api_mda.47 + [12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. + 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 0. 0. + 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. + 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. + 12. 12. 12. 12. 12. 12. 12. 0. 12. 12. 12. 12. 12. 12. 12. 12. 12. 12. + 12. 12. 12. 12. 12. 12. 12. 0. 12. 12.] +# --- +# name: test_op_api_mda.5 + [ 99 590 319 46 2 178 572 454 389 28 332 594 241 503 115 235 323 108 + 516 408 114 441 499 305 541 115 240 354 119 56 245 438 592 236 624 614 + 35 440 298 522 370 435 146 110 608 243 143 326 380 239 462 588 271 169 + 256 16 230 206 22 405 373 456 459 473 352 155 594 66 226 514 484 117 + 537 299 109 542 544 462 94 625 519 573 369 497 105 234 324 549 593 210 + 24 28 151 306 439 229 312 613 549 401] +# --- +# name: test_op_api_mda.6 + [ 7 8 17 9 19 17 3 14 17 12 9 14 11 7 8 6 8 17 7 11 3 5 6 7 + 3 6 10 13 2 9 7 5 15 5 41 42 8 3 5 16 3 5 16 5 11 15 17 10 + 10 5 11 11 6 8 9 3 0 9 7 0 8 11 18 5 19 6 14 9 2 12 7 4 + 5 5 18 8 5 10 12 43 8 6 4 10 5 12 6 12 12 15 12 12 10 5 4 5 + 19 43 13 3] +# --- +# name: test_op_api_mda.7 + [6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 0 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 6 6] +# --- +# name: test_op_api_mda.8 + [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] +# --- +# name: test_op_api_mda.9 + AttributeError("The selected attribute 'entity_id' does not exist on the mesh.") +# --- +# name: test_op_local[bcif-4ozs] [[ 0.3 -0.0 0.3] [ 0.5 0.2 -0.0] [ 0.2 -0.0 0.2] @@ -4643,7 +3055,7 @@ [ 0.3 -0.0 0.2] [ 0.2 -0.0 0.3]] # --- -# name: test_op_local[cif-4ozs].1 +# name: test_op_local[bcif-4ozs].1 [[-3.2e-02 -6.2e-02 2.2e-01] [ 1.3e-01 1.4e-01 -1.3e-01] [-1.1e-01 -5.9e-02 1.0e-01] @@ -4745,7 +3157,7 @@ [-1.6e-02 -9.4e-02 6.7e-02] [-1.1e-01 -7.9e-02 2.1e-01]] # --- -# name: test_op_local[cif-8H1B] +# name: test_op_local[bcif-8H1B] [[-0.1 0.3 0.3] [-0.2 0.2 0.3] [ 0.2 -0.3 0.2] @@ -4847,7 +3259,7 @@ [ 0.1 0.0 0.6] [-0.1 -0.2 -0.0]] # --- -# name: test_op_local[cif-8H1B].1 +# name: test_op_local[bcif-8H1B].1 [[-1.6e-01 2.6e-01 9.2e-02] [-2.1e-01 2.0e-01 4.2e-02] [ 1.8e-01 -2.7e-01 -5.0e-02] @@ -4949,7 +3361,7 @@ [ 6.0e-02 2.0e-02 4.2e-01] [-1.4e-01 -1.5e-01 -2.3e-01]] # --- -# name: test_op_local[cif-8U8W] +# name: test_op_local[bcif-8U8W] [[-0.2 -0.2 0.1] [-0.3 -0.0 0.3] [-0.3 -0.1 0.2] @@ -5051,7 +3463,7 @@ [-0.3 -0.1 0.1] [-0.2 0.1 0.1]] # --- -# name: test_op_local[cif-8U8W].1 +# name: test_op_local[bcif-8U8W].1 [[ 9.4e-02 -1.6e-01 -9.6e-02] [ 5.5e-02 7.9e-03 8.1e-02] [ 4.1e-02 -1.3e-01 4.2e-02] @@ -5153,211 +3565,7 @@ [ 5.3e-02 -1.1e-01 -1.0e-01] [ 8.9e-02 9.3e-02 -6.2e-02]] # --- -# name: test_op_local[pdb-1BNA] - [[ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.1 -0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.3 0.3] - [ 0.1 0.2 0.0] - [ 0.2 0.3 0.3] - [ 0.2 0.3 0.1] - [ 0.2 0.2 0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 -0.0] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 -0.1] - [ 0.1 0.2 0.3] - [ 0.1 0.1 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.0] - [ 0.2 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.1 0.3 -0.1] - [ 0.1 0.3 0.1] - [ 0.1 0.3 0.2] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.1] - [ 0.3 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.1 0.3 0.1] - [ 0.1 0.1 -0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.3 0.1] - [ 0.1 0.1 0.1] - [ 0.2 0.2 0.1] - [ 0.2 0.1 0.1] - [ 0.1 0.3 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.3 0.1] - [ 0.2 0.3 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.2 0.2 -0.0] - [ 0.1 0.1 0.1] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.1] - [ 0.1 0.3 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.1 0.2] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.2 0.1 -0.0] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 -0.0] - [ 0.1 0.1 -0.1] - [ 0.1 0.2 -0.0] - [ 0.1 0.2 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.3 0.0] - [ 0.3 0.1 -0.0] - [ 0.2 0.3 0.2] - [ 0.2 0.2 0.1] - [ 0.1 0.2 -0.1] - [ 0.2 0.2 -0.0] - [ 0.2 0.3 0.1] - [ 0.2 0.1 0.1] - [ 0.2 0.2 0.2] - [ 0.2 0.2 -0.1] - [ 0.1 0.2 0.1] - [ 0.1 0.2 0.2] - [ 0.2 0.2 0.2] - [ 0.1 0.2 0.3] - [ 0.2 0.2 0.0] - [ 0.1 0.2 0.0] - [ 0.1 0.2 0.3] - [ 0.3 0.2 0.0] - [ 0.1 0.3 -0.1]] -# --- -# name: test_op_local[pdb-1BNA].1 - [[ 4.1e-02 -7.4e-02 7.3e-02] - [ 7.4e-02 4.9e-02 6.6e-02] - [ 2.2e-02 -1.0e-01 -1.4e-01] - [ 4.6e-02 4.6e-02 1.3e-01] - [ 4.3e-02 1.3e-01 1.7e-01] - [-8.7e-02 1.7e-02 -4.1e-02] - [ 2.2e-02 4.3e-02 1.8e-01] - [ 2.7e-02 4.2e-02 4.0e-03] - [ 5.4e-02 2.8e-02 -8.4e-02] - [ 7.5e-02 6.2e-02 1.4e-01] - [ 6.5e-03 -4.8e-02 -1.5e-01] - [ 6.1e-03 -9.1e-02 3.4e-02] - [-1.9e-02 6.4e-02 -1.5e-01] - [-8.2e-02 3.2e-03 1.1e-01] - [ 3.8e-03 5.0e-02 -9.6e-02] - [ 2.8e-03 -4.3e-03 5.3e-02] - [-2.0e-02 -1.7e-02 -1.2e-01] - [-2.0e-02 -7.0e-02 -1.4e-01] - [ 1.7e-02 -4.1e-02 6.0e-02] - [-3.1e-02 1.4e-02 1.3e-01] - [ 5.1e-02 6.1e-02 -6.3e-02] - [ 2.4e-02 2.2e-03 4.4e-02] - [-1.9e-02 5.2e-02 -1.3e-02] - [-1.1e-02 2.9e-02 7.9e-02] - [-5.0e-02 -2.6e-02 -1.8e-01] - [-3.7e-03 -1.5e-02 1.7e-01] - [-2.1e-02 -1.0e-01 -8.6e-02] - [-3.0e-02 6.0e-03 -1.2e-01] - [-5.2e-03 -6.3e-02 -1.0e-01] - [ 1.1e-02 -2.9e-02 5.8e-02] - [ 9.4e-02 -6.9e-03 1.0e-01] - [-4.1e-03 6.1e-02 -1.5e-01] - [-2.9e-02 6.2e-02 -1.5e-02] - [-5.9e-03 7.1e-02 1.3e-01] - [-1.2e-02 -6.4e-03 -1.2e-01] - [-7.2e-02 -4.0e-03 -1.8e-01] - [ 1.1e-01 -8.1e-02 1.0e-01] - [ 3.5e-02 6.5e-02 1.3e-01] - [-9.2e-02 6.4e-02 1.8e-03] - [-3.8e-02 -8.0e-02 -1.8e-01] - [ 5.9e-03 2.0e-02 1.1e-01] - [ 3.8e-02 -2.7e-02 -8.4e-02] - [-8.9e-03 9.7e-02 -3.3e-02] - [-8.0e-02 -7.0e-02 3.5e-02] - [ 3.0e-02 -3.9e-02 5.5e-02] - [ 1.5e-02 -8.7e-02 5.7e-03] - [-1.9e-02 7.6e-02 -1.4e-01] - [-2.5e-02 -2.2e-02 2.9e-02] - [-1.9e-02 -3.6e-02 -1.5e-01] - [ 4.5e-03 4.9e-03 -9.2e-02] - [-1.7e-02 5.7e-03 -1.2e-01] - [-6.1e-02 5.1e-02 1.8e-02] - [ 1.8e-02 8.2e-02 1.1e-01] - [ 5.2e-02 1.4e-02 -2.0e-01] - [-9.3e-02 -3.0e-02 -1.0e-02] - [ 7.1e-02 -2.7e-02 -9.9e-02] - [-4.3e-02 -6.9e-02 4.4e-02] - [-6.5e-02 -1.4e-02 1.2e-01] - [-8.7e-03 4.5e-03 1.3e-01] - [-3.9e-02 -2.9e-02 1.7e-01] - [ 1.6e-02 1.3e-02 -2.4e-02] - [-5.3e-02 6.1e-02 8.2e-02] - [ 4.3e-02 1.0e-01 1.4e-01] - [ 3.7e-02 -3.9e-02 -4.0e-02] - [-1.1e-02 1.8e-02 4.7e-02] - [ 1.3e-02 -7.6e-02 6.9e-02] - [ 3.4e-02 8.7e-02 1.6e-01] - [ 5.1e-02 2.9e-02 -6.0e-02] - [-5.6e-02 3.0e-02 -8.6e-02] - [ 4.3e-02 -8.5e-02 -1.3e-01] - [-1.7e-02 5.4e-03 1.7e-01] - [ 7.9e-02 -5.5e-02 -5.0e-02] - [ 3.0e-04 -1.7e-02 -8.4e-02] - [-6.0e-03 -3.6e-02 -7.6e-02] - [-2.8e-02 -2.9e-02 -4.3e-02] - [-3.8e-02 1.7e-02 -1.2e-01] - [-5.1e-02 5.7e-05 -1.1e-01] - [-6.5e-03 -6.9e-02 -1.4e-01] - [ 1.5e-03 -8.3e-03 -1.2e-01] - [-8.3e-02 3.3e-03 -3.8e-02] - [ 6.6e-02 -4.8e-02 8.3e-02] - [ 2.5e-02 6.0e-02 -6.4e-02] - [ 1.1e-01 -8.3e-02 -1.1e-01] - [ 5.6e-02 5.5e-02 1.3e-01] - [ 1.5e-02 -7.2e-03 5.0e-02] - [-9.6e-03 -1.6e-03 -1.5e-01] - [ 7.5e-02 -4.1e-02 -1.0e-01] - [ 5.0e-02 8.5e-02 -2.7e-02] - [ 4.1e-02 -7.2e-02 2.9e-02] - [ 5.5e-02 1.9e-02 1.1e-01] - [ 5.4e-02 2.3e-02 -1.7e-01] - [-6.8e-02 -4.4e-02 2.9e-02] - [-7.6e-02 3.8e-04 9.8e-02] - [ 8.7e-02 5.5e-03 1.0e-01] - [-5.4e-03 -7.1e-04 1.6e-01] - [ 7.9e-02 -7.1e-03 -8.7e-02] - [-5.6e-02 -4.9e-02 -7.6e-02] - [-5.2e-02 -2.4e-02 1.7e-01] - [ 1.2e-01 2.8e-02 -7.4e-02] - [-2.5e-02 4.2e-02 -1.9e-01]] -# --- -# name: test_op_local[pdb-4ozs] +# name: test_op_local[cif-4ozs] [[ 0.3 -0.0 0.3] [ 0.5 0.2 -0.0] [ 0.2 -0.0 0.2] @@ -5459,7 +3667,7 @@ [ 0.3 -0.0 0.2] [ 0.2 -0.0 0.3]] # --- -# name: test_op_local[pdb-4ozs].1 +# name: test_op_local[cif-4ozs].1 [[-3.2e-02 -6.2e-02 2.2e-01] [ 1.3e-01 1.4e-01 -1.3e-01] [-1.1e-01 -5.9e-02 1.0e-01] @@ -5561,7 +3769,7 @@ [-1.6e-02 -9.4e-02 6.7e-02] [-1.1e-01 -7.9e-02 2.1e-01]] # --- -# name: test_op_local[pdb-8H1B] +# name: test_op_local[cif-8H1B] [[-0.1 0.3 0.3] [-0.2 0.2 0.3] [ 0.2 -0.3 0.2] @@ -5663,7 +3871,7 @@ [ 0.1 0.0 0.6] [-0.1 -0.2 -0.0]] # --- -# name: test_op_local[pdb-8H1B].1 +# name: test_op_local[cif-8H1B].1 [[-1.6e-01 2.6e-01 9.2e-02] [-2.1e-01 2.0e-01 4.2e-02] [ 1.8e-01 -2.7e-01 -5.0e-02] @@ -5765,7 +3973,7 @@ [ 6.0e-02 2.0e-02 4.2e-01] [-1.4e-01 -1.5e-01 -2.3e-01]] # --- -# name: test_op_local[pdb-8U8W] +# name: test_op_local[cif-8U8W] [[-0.2 -0.2 0.1] [-0.3 -0.0 0.3] [-0.3 -0.1 0.2] @@ -5867,7 +4075,7 @@ [-0.3 -0.1 0.1] [-0.2 0.1 0.1]] # --- -# name: test_op_local[pdb-8U8W].1 +# name: test_op_local[cif-8U8W].1 [[ 9.4e-02 -1.6e-01 -9.6e-02] [ 5.5e-02 7.9e-03 8.1e-02] [ 4.1e-02 -1.3e-01 4.2e-02]