Giter Site home page Giter Site logo

nlesc-nano / cat Goto Github PK

View Code? Open in Web Editor NEW
16.0 3.0 2.0 25.05 MB

A collection of tools designed for the automatic construction, and subsequent analysis, of chemical compounds.

License: Other

Python 99.98% Shell 0.02%
quantum-mechanics science chemistry automation scientific-workflows molecular-mechanics python

cat's Introduction

https://readthedocs.org/projects/cat/badge/?version=latest

Compound Attachment Tool

CAT is a collection of tools designed for the construction of various chemical compounds. Further information is provided in the documentation.

Package installation

CAT can be installed via pip as following:

  • CAT: pip install nlesc-CAT --upgrade

Note that, while not strictly necessary, it is recommended to first create a conda environment:

  • Download and install miniconda for python3: miniconda (also you can install the complete anaconda version).
  • Create a new virtual environment: conda create --name CAT python
  • Activate the environment:: conda activate CAT

Input files

Running CAT and can be done with the following command: init_cat my_settings.yaml. The user merely has to provide a yaml file with the job settings, settings which can be tweaked and altered to suit ones purposes (see example1). Alternatively, CAT can be run like a regular python script, bypassing the command-line interface (i.e. python input.py, see example2).

An extensive description of the various available settings is available in the documentation.

References

cat's People

Contributors

bvb93 avatar dependabot[bot] avatar felipez avatar jbelic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

bvb93 pk-organics

cat's Issues

Dye branch: handling symmetry

Find a way to handle symmetry equivalent configurations.

Option A: Manually mark symmetry equivalent positions. After the dyes have been generated, delete all symmetry equivalent structures based on these patterns in these user-specified positions.
Option B: Find a package which can automatically recognize symmetry, removing the need for manual interference.

Issue with ADF environmental variables

when running init_cat in an environment where ADF is not installed I get the following error:

>>> init_cat cat_input.yml                        
[16:38:25] INFO: Starting CAT (version: 0.9.11)                                                       
[16:38:25] INFO: The optional Nano-CAT package was successfully found (version: 0.6.1)
[16:38:25] INFO: The optional Data-CAT package was successfully found (version: 0.5.2)

[16:38:25] ERROR: The environment variable 'ADFBIN' has not been set
[16:38:25] ERROR: The environment variable 'ADFHOME' has not been set                                                                                                                                       
[16:38:25] ERROR: The environment variable 'ADFRESOURCES' has not been set
[16:38:25] ERROR: The environment variable 'SCMLICENSE' has not been set                                                                                                                                    
[16:38:25] DEBUG:     data: Settings = job1:    AMSJob

Dye: add tests

There are a number of examples of pre-existing tests already in CAT (ref).

Investigate problematic functional groups

Certain function groups will yield poor geometries.
Known offenders:

  • O=P(R)(R)R
  • P(R)(R)R
  • N(R)(R)R

Problematic to a lesser extent:

  • N([H])(R)R

The chalcogens seems to be fine (e.g. S(R)R).

Using NetCDF for the Database

Proposed alternative:
Add an additional dataset for storing the input files.
Similar approach to storing .pdb files: each line in the input file will be converted into a single string.
End result: a 2D array/dataset of strings.

optional.ligand.anchor.mean

Hi there,

sorry to disturb but we are facing some troubles with the optional.ligand.anchor.mean option.

In particular we are trying to attach the two oxygens of a carboxylic acid to an In atom using the following the incl3.xyz core file:

4
 
In     0.000000     0.000000     0.000000
Cl     0.000000     0.000000     2.410000
Cl     2.272173     0.000000    -0.803325
Cl    -1.514773     0.000000    -1.874450

and input file:

input_cores:
    - incl3.xyz:
        guess_bonds: False

input_ligands:
    - CCCC(=O)O

optional:
    core:
        dirname: core
        anchor: Cl

    ligand:
        dirname: ligand
        anchor:
             group: "[H]OC(=O)"  # Remove H and attach at the mean position of both oxygens
             group_idx: [1, 3]
             remove: 0
             kind: mean
        optimize: False
        split: False

The program seems to recognize that two oxygens are to be attached (the qd file name is in fact Cl3In1__3_CCCC[=O][O-]@O5O6.xyz) but only one oxygen is actually anchored instead of the "mean" position...

can you please have a look at this?

thanks in advance! :)

Error running CAT, update_csv

When running CAT with the following input:

path: "."

input_cores:
   - Cd68Se55.xyz:
        guess_bonds: False

input_ligands:
  - "smiles.txt"

optional:
    qd:
       bulkiness: True
    ligand:
           cosmo-rs: False
           functional_groups: ['O(C=O)[H]']

and smiles.txt files containing:

CCCCCCCCC=CCCCCCCCC(=O)O
CC(=O)O
O=C(O)Cc1ccccc1
CC(O)C(=O)O

I got the following error:

[10:37:38] INFO: Starting CAT (version: 0.9.9)
[10:37:38] INFO: The optional Nano-CAT package was successfully found (version: 0.6.1)
[10:37:38] INFO: The optional Data-CAT package was successfully found (version: 0.5.1)

[10:37:38] INFO: ligand_database.csv not found in /tmp/pytest-of-user/pytest-6/test_compute_bulkiness0/cat_workdir/0/database, creating ligand database
[10:37:38] INFO: qd_database.csv not found in /tmp/pytest-of-user/pytest-6/test_compute_bulkiness0/cat_workdir/0/database, creating qd database
[10:37:38] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
[10:37:38] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
[10:37:38] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
[10:37:39] CRITICAL: TypeError: update_csv() got multiple values for argument 'database'
Traceback (most recent call last):
  File "/home/user/miniconda3/envs/insilico/bin/init_cat", line 8, in <module>
    sys.exit(main())
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/data_handling/entry_points.py", line 64, in main
    raise ex
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/data_handling/entry_points.py", line 61, in main
    base.prep(extract_args(args), return_mol=False)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 122, in prep
    ligand_df = prep_ligand(ligand_df)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 296, in prep_ligand
    init_ligand_opt(ligand_df)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/attachment/ligand_opt.py", line 68, in init_ligand_opt
    workflow.to_db(ligand_df, index=idx)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/workflows/workflow.py", line 517, in to_db
    self.db.update_csv(
TypeError: update_csv() got multiple values for argument 'database'

Dye: clean up the code

  • Ensure the code is PEP8-compliant (with the maximum number of characters per line upped to 100).
  • For docstrings it's ok (if necasary) to go over this limit; just make sure to mark the respective docstring with the # noqa comment (i.e. "no quality assurance").

Update the CAT/database interaction

  1. Update & improve the interaction between CAT & the CAT results database.
  2. Store job settings in the database.
  3. Optional: move the database ot its own separate folder.
  4. Add the option to convert the database to MongoDB format.
  5. Add the option to enable/disable the exporting of .xyz files.
  6. Add the option to convert the .pdb files to the hdf5 format.

Race condition when running multiple parallel instances of CAT

The problem

When running multiple instances of CAT in parallel, using the prep function (from CAT.base import prep), the following error is raised:

[Errno 17] File exists: '.../workdir/plams_workdir'

The error is due to multiple Python processes running Plams independently resulting in multiple attends to create a plams_workdir in the current work directory.

Possible solution

I have bypassed the issue by using the retry decorator on the function invoking CAT, but a more robust behaviour could be that CAT invokes PLAMS using different (temporal) workdirs instead of the current workdir from where CAT is invoked

Error computing bulkiness

When calling cat like, init_cat input.yml with the following input:

path: "."

input_cores:
    - Cd68Se55.xyz:
        guess_bonds: False

input_ligands:
    - smiles.txt

optional:
    qd:
       bulkiness: True
    ligand:
       functional_groups:
          "O(C=O)[H]"

and with smiles.txt containing:

CCCCCCCCC=CCCCCCCCC(=O)O
CC(=O)O
O=C(O)Cc1ccccc1
CC(O)C(=O)O

I get the following error:

[17:19:15] INFO: Starting CAT (version: 0.9.9)                              
[17:19:15] INFO: The optional Nano-CAT package was successfully found (version: 0.6.1)
[17:19:15] INFO: The optional Data-CAT package was successfully found (version: 0.5.1)
17:19:15] INFO: ligand_database.csv not found in /tmp/swan_workdir_o06z3ywi/cat_workdir/5/TEST/database, creating ligand database
[17:19:15] INFO: qd_database.csv not found in /tmp/swan_workdir_o06z3ywi/cat_workdir/5/TEST/database, creating qd database                              
[17:19:15] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'                                                
[17:19:15] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'      
[17:19:15] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'                                                                            
[17:19:15] INFO: Starting ligand geometry optimization                                                                                                  
[17:19:15] INFO: UFFGetMoleculeForceField: CCCCCCCCC=CCCCCCCCC[=O][O-]@O19 optimization has started                       
[17:19:15] INFO: UFFGetMoleculeForceField: CCCCCCCCC=CCCCCCCCC[=O][O-]@O19 optimization is successful
[17:19:15] INFO: UFFGetMoleculeForceField: CC[=O][O-]@O3 optimization has started                                             
[17:19:15] INFO: UFFGetMoleculeForceField: CC[=O][O-]@O3 optimization is successful
[17:19:15] INFO: UFFGetMoleculeForceField: O=C[[O-]]Cc1ccccc1@O9 optimization has started                               
[17:19:15] INFO: UFFGetMoleculeForceField: O=C[[O-]]Cc1ccccc1@O9 optimization is successful
[17:19:15] INFO: UFFGetMoleculeForceField: CC[O]C[=O][O-]@O5 optimization has started                                                                   
[17:19:15] INFO: UFFGetMoleculeForceField: CC[O]C[=O][O-]@O5 optimization is successful
[17:19:15] INFO: Starting quantum dot construction                                                                                                      
/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/attachment/ligand_attach.py:545: MoleculeWarning:       
Encountered >= 26 unique atom-pairs at a distance shorter than 1.0 Angstrom in 'Cd68Cl26Se55__26_CC[O]C[=O][O-]@O5':                                    
array([[127, 138, 149, ..., 380, 391, 402],                                                                                                             
       [130, 141, 152, ..., 383, 394, 405]])                           
  action_func(exc)                                                                                                                                      
[17:19:15] INFO: Finishing quantum dot construction                                                                                                     
                                                                                                                                                        
[17:19:16] INFO: Starting ligand bulkiness calculation                                                                                                  
[17:19:16] INFO: Finishing ligand bulkiness calculation                                                                                                 
                                                                                                                                                        
[17:19:16] CRITICAL: ValueError: Index (0) out of range (0--1)     
Traceback (most recent call last):                                                                                                                      
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 85, in select                                   
    int(a)                                                                                                                                              
TypeError: only size-1 arrays can be converted to Python scalars                                                                                        
                                                                                                                                                        
During handling of the above exception, another exception occurred:                                                                                     
                                                                            
Traceback (most recent call last):                                                                                                                      
  File "/home/user/miniconda3/envs/insilico/bin/init_cat", line 8, in <module> 
    sys.exit(main())                                                                                                                            [0/1935]
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/data_handling/entry_points.py", line 64, in main
    raise ex
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/data_handling/entry_points.py", line 61, in main
    base.prep(extract_args(args), return_mol=False)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 125, in prep
    qd_df = prep_qd(ligand_df, core_df, qd_df)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 387, in prep_qd
    init_lig_bulkiness(qd_df, ligand_df, core_df)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/nanoCAT/mol_bulk.py", line 80, in init_lig_bulkiness
    workflow.to_db(qd_df, index=idx)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/workflows/workflow.py", line 517, in to_db
    self.db.update_csv(
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/dataCAT/database.py", line 393, in update_csv
    update_prop_dset(dset, data, hdf5_index)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/dataCAT/property_dset.py", line 269, in update_prop_dset
    raise ex
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/dataCAT/property_dset.py", line 266, in update_prop_dset
    dset[idx] = data
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/dataset.py", line 685, in __setitem__
    selection = sel.select(self.shape, args, dsid=self.id)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 90, in select
    sel[args]
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 401, in __getitem__
    start, count, step, scalar = _handle_simple(self.shape, vector)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 466, in _handle_simple
    x,y,z = _translate_int(int(arg), length)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 486, in _translate_int
    raise ValueError("Index (%s) out of range (0-%s)" % (exp, length-1))
ValueError: Index (0) out of range (0--1)

I really appreciate some help about the error :) !

Implement a nanocrystal builder

Potential starting points for implementation:

  • NanoCrystal: A Web-Based Crystallographic Tool for the Construction of Nanoparticles Based on Their Crystal Habit.
  • ASE: The Atomic Simulation Environment (ASE) is a set of tools and Python modules for setting up, manipulating, running, visualizing and analyzing atomistic simulations.
    • Ase can be used for creating (periodic) crystal structures, thus making it a potential starting point for constructing actual nanocrystals.

Error Running when there is a network file system

The problem

When executing the hte following call to CAT in a supercompute with a network file system,

import yaml
from CAT.base import prep
from scm.plams import Settings
from contextlib import redirect_stderr


input_cat = yaml.load("""
path: "workdir"

input_cores:
    - Cd68Se55.xyz:
        guess_bonds: False

input_ligands:
    - smiles.txt

optional:
    ligand:
       cosmo-rs: True
       functional_groups:
          "O(C=O)[H]"
""", Loader=yaml.FullLoader)

inp = Settings(input_cat)
with open("cat_output.log", 'a') as f:
    with redirect_stderr(f):
        prep(inp)

where smiles:

CCCCCCCCC=CCCCCCCCC(=O)O
CC(=O)O

The computation hangs on until it runs out of time or the user kill it. All the molecules have been optimized and the ADF calculations finished successfully but CAT reports the following error:


  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/jobrunner.py", line 111, in _run_job
Exception in thread plamsthread:
Traceback (most recent call last):
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    if job._prepare(jobmanager):
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/basejob.py", line 191, in _prepare
    self.run()
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 870, in run
    prev = jobmanager._check_hash(self)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 169, in _check_hash
    self._target(*self._args, **self._kwargs)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/jobrunner.py", line 111, in _run_job
    return self.hashes[h]()
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 107, in unpickle_job
    if job._prepare(jobmanager):
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/basejob.py", line 191, in _prepare
Exception in thread plamsthread:
Traceback (most recent call last):
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    ret = GenJobManager._unpickle(_filename)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 97, in _unpickle
    prev = jobmanager._check_hash(self)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 169, in _check_hash
    self.run()
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/threading.py", line 870, in run
    return self.hashes[h]()
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 107, in unpickle_job
    self._target(*self._args, **self._kwargs)
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/jobrunner.py", line 111, in _run_job
    ret = GenJobManager._unpickle(_filename)

  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/gen_job_manager.py", line 97, in _unpickle
    if job._prepare(jobmanager):
  File "/home/user/miniconda3/envs/insilico/lib/python3.8/site-packages/scm/plams/core/basejob.py", line 191, in _prepare
    with open(filename, 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/nfs/home6/user/Ligands/CAT/workdir/ligand/crs/Acetone/Acetone.dill'

The program complains about a file that exists in the login node:

(insilico) [user@int1 CAT]$ ls /nfs/home6/user/Ligands/CAT/workdir/ligand/crs/Acetone/Acetone.dill
/nfs/home6/user/Ligands/CAT/workdir/ligand/crs/Acetone/Acetone.dill

But it seems that the path /nfs/home6 is not reachable from the computation node

HDF5 error running CAT

CAT input:

input_cores:
- Cd68Se55.xyz:
    guess_bonds: false
input_ligands:
- smiles.txt
optional:
  ligand:
    cosmo-rs: false
    functional_groups:
    - O(C=O)[H]
  qd:
    bulkiness:
      d: auto
      h_lim: null
    construct_qd: false
path: /tmp/

smiles:

CCCCCCCCC=CCCCCCCCC(=O)O
CC(=O)O
O=C(O)Cc1ccccc1
CC(O)C(=O)O

CAT error:

[14:56:48] INFO: Starting CAT (version: 0.9.11)                                                                                                        
[14:56:48] INFO: The optional Nano-CAT package was successfully found (version: 0.6.1)                                                                 
[14:56:48] INFO: The optional Data-CAT package was successfully found (version: 0.5.2)                                                                 
                                                                                                                                                       
[14:56:48] INFO: ligand_database.csv not found in /tmp/pytest-of-felipe/pytest-8/test_filter_bulkiness0/cat_workdir/0/database, creating ligand databas
e                                                                                                                                                      
[14:56:48] INFO: qd_database.csv not found in /tmp/pytest-of-felipe/pytest-8/test_filter_bulkiness0/cat_workdir/0/database, creating qd database       
[14:56:48] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'                                                                         
[14:56:48] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'                                                                       
[14:56:48] INFO: Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'                                                                           
[14:56:48] DEBUG: Creating converter from 5 to 3                                                                                                       
[14:56:48] DEBUG: Creating converter from 5 to 9                                                                                                       
[14:56:48] INFO: Starting ligand geometry optimization                                                                                                 
[14:56:48] INFO: UFFGetMoleculeForceField: CCCCCCCCC=CCCCCCCCC[=O][O-]@O19 optimization has started                                                    
[14:56:49] INFO: UFFGetMoleculeForceField: CCCCCCCCC=CCCCCCCCC[=O][O-]@O19 optimization is successful                                                  
[14:56:49] INFO: UFFGetMoleculeForceField: CC[=O][O-]@O3 optimization has started                                                                      
[14:56:49] INFO: UFFGetMoleculeForceField: CC[=O][O-]@O3 optimization is successful                                                                    
[14:56:49] INFO: UFFGetMoleculeForceField: O=C[[O-]]Cc1ccccc1@O9 optimization has started                                                              
[14:56:49] INFO: UFFGetMoleculeForceField: O=C[[O-]]Cc1ccccc1@O9 optimization is successful                                                            
[14:56:49] INFO: UFFGetMoleculeForceField: CC[O]C[=O][O-]@O5 optimization has started                                                                  
[14:56:49] INFO: UFFGetMoleculeForceField: CC[O]C[=O][O-]@O5 optimization is successful                                                                
[14:56:49] INFO: Starting ligand bulkiness calculation                                                                                                 
[14:56:49] INFO: Finishing ligand bulkiness calculation                                                                                                
                                                                                                                                                       
[14:56:49] DEBUG:     __name__: str = 'h5py._selector'                                                                                                 
[14:56:49] DEBUG:     __doc__: str = ('Class to efficiently select and read data from an HDF5 dataset\n'                                               
[14:56:49] DEBUG:                     '\n'                                                                                                             
[14:56:49] DEBUG:                     'This is written in Cython to reduce overhead when reading small amounts of\n'                                   
[14:56:49] DEBUG:                     'data. The core of it is translating between numpy-style slicing & indexing '                                    
[14:56:49] DEBUG:                     'and\n'                                                                                                          
[14:56:49] DEBUG:                     "HDF5's H5Sselect_hyperslab calls.\n"                                                                            
[14:56:49] DEBUG:                     '\n'     
[14:56:49] DEBUG:                     'This is written in Cython to reduce overhead when reading small amounts of\n'                                   
[14:56:49] DEBUG:                     'data. The core of it is translating between numpy-style slicing & indexing '                                    
[14:56:49] DEBUG:                     'and\n'                                                                                                          
[14:56:49] DEBUG:                     "HDF5's H5Sselect_hyperslab calls.\n"                                                                            
[14:56:49] DEBUG:                     '\n'                                                                                                             
[14:56:49] DEBUG:                     'Python & numpy distinguish indexing a[3] from slicing a single element '
[14:56:49] DEBUG:                     'a[3:4],\n'                          
[14:56:49] DEBUG:                     'but there is no equivalent to this when selecting data in HDF5. So we store '
[14:56:49] DEBUG:                     'a\n'                                
[14:56:49] DEBUG:                     "separate boolean ('scalar') for each dimension to distinguish these cases.\n")
[14:56:49] DEBUG:     __package__: str = 'h5py'                            
[14:56:49] DEBUG:     __loader__: ExtensionFileLoader = <_frozen_importlib_external.ExtensionFileLoader object at 0x7fab938bb430>
[14:56:49] DEBUG:     __spec__: ModuleSpec = ModuleSpec(name='h5py._selector', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x7fab9
38bb430>, origin='/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_selector.cpython-38-x86_64-linux-gnu.so')
[14:56:49] DEBUG:     __file__: str = '/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_selector.cpython-38-x86_64-linux-gnu.so'
[14:56:49] DEBUG:     __builtins__: module = <module 'builtins' (built-in)>                                                                            
[14:56:49] DEBUG:     Selector: type = <class 'h5py._selector.Selector'>                                                                               
[14:56:49] DEBUG:     Reader: type = <class 'h5py._selector.Reader'>                                                                                   
[14:56:49] DEBUG:     np: module = <module 'numpy' from '/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/numpy/__init__.py'>
[14:56:49] DEBUG:     MultiBlockSlice: type = <class 'h5py._selector.MultiBlockSlice'>                                                                 
[14:56:49] DEBUG:     __test__: dict = {}                                  
Traceback (most recent call last):                                         
  File "/home/felipe/miniconda3/envs/insilico/bin/init_cat", line 8, in <module>                                                                       
    sys.exit(main())                                                       
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/data_handling/entry_points.py", line 62, in main
    base.prep(extract_args(args), return_mol=False)                                                                                                    
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 125, in prep
    qd_df = prep_qd(ligand_df, core_df, qd_df)                             
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py", line 387, in prep_qd
    init_lig_bulkiness(qd_df, ligand_df, core_df)                          
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/nanoCAT/mol_bulk.py", line 81, in init_lig_bulkiness
    workflow.to_db(qd_df, index=idx)                                       
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/workflows/workflow.py", line 517, in to_db
    self.db.update_csv(                                                    
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/dataCAT/database.py", line 405, in update_csv
    update_prop_dset(dset, data, hdf5_index)                               
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/dataCAT/property_dset.py", line 266, in update_prop_dset
    dset[idx] = data                                                       
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper                                                                                
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper                                                                                
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/dataset.py", line 910, in __setitem__
    selection = sel.select(self.shape, args, dataset=self)                                                                                             
  File "/home/felipe/miniconda3/envs/insilico/lib/python3.8/site-packages/h5py/_hl/selections.py", line 82, in select
    return selector.make_selection(args)                                   
  File "h5py/_selector.pyx", line 272, in h5py._selector.Selector.make_selection                                                                       
  File "h5py/_selector.pyx", line 198, in h5py._selector.Selector.apply_args                                                                           
IndexError: Fancy indexing out of range for empty dimension 

BUG: Investigate potential PLAMS-related failures

As of de99e15 (e.g. https://github.com/nlesc-nano/CAT/runs/8132805178?check_suite_focus=true) the pre-release tests show coordinate-related failures, presumably related to some change in the dev version of PLAMS.

CI output
============================= test session starts ==============================
platform linux -- Python 3.10.6, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/runner/work/CAT/CAT, configfile: setup.cfg, testpaths: CAT, tests
plugins: cov-3.0.0, mock-3.8.2
collected 201 items / 1 deselected / 200 selected

CAT/recipes.py .                                                         [  0%]
CAT/utils.py .                                                           [  1%]
CAT/attachment/as_array.py .                                             [  1%]
CAT/attachment/distribution.py .                                         [  2%]
CAT/attachment/distribution_utils.py .                                   [  2%]
CAT/attachment/mol_split_cm.py .                                         [  3%]
CAT/attachment/remove_atoms_cm.py .                                      [  3%]
CAT/data_handling/mol_import.py .                                        [  4%]
CAT/data_handling/validate_mol.py .                                      [  4%]
CAT/workflows/workflow.py ..                                             [  5%]
tests/test_CAT.py .                                                      [  6%]
tests/test_distribution.py .                                             [  6%]
tests/test_distribution_brute.py .                                       [  7%]
tests/test_edge_dist.py ...                                              [  8%]
tests/test_entry_points.py .xFxFFFFFxFxFFFFFFFF                          [ 18%]
tests/test_frozen_settings.py ....                                       [ 20%]
tests/test_gen_job_manager.py ..                                         [ 21%]
tests/test_indices.py F                                                  [ 22%]
tests/test_ligand_anchoring.py ....FFFFFF.F............................. [ 42%]
........................                                                 [ 54%]
tests/test_ligand_attach.py ..FFFF.F.F.F.F.                              [ 62%]
tests/test_ligand_opt.py .                                               [ 62%]
tests/test_logger.py .                                                   [ 63%]
tests/test_mol_import.py .........F                                      [ 68%]
tests/test_mol_str_parser.py ........................                    [ 80%]
tests/test_mol_to_file.py .                                              [ 80%]
tests/test_mol_utils.py .......F.                                        [ 85%]
tests/test_multi_ligand.py x                                             [ 85%]
tests/test_perp_surface.py .                                             [ 86%]
tests/test_schemas.py ..........                                         [ 91%]
tests/test_settings_dataframe.py .                                       [ 91%]
tests/test_sphinx.py .                                                   [ 92%]
tests/test_thermo_chem.py ..                                             [ 93%]
tests/test_thread_safe.py .                                              [ 93%]
tests/test_utils.py .......                                              [ 97%]
tests/test_validate_input.py ..                                          [ 98%]
tests/test_validate_mol.py ....                                          [100%]

=================================== FAILURES ===================================
___________________ TestMain.test_mol[CCCCCCCCPCCCCCCCC@P17] ___________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 52 (0%)
E   Mismatched atoms:              50 / 52 (96%)
E   Mismatched atomic symbols:     15 / 52 (29%)
E   Atoms max absolute difference: 0.3118937474148371
E   Atoms max relative difference: 1.0
E    actual: array([[ 3.98 , -2.056, -2.91 ],
E          [ 3.984,  2.709,  2.265],
E          [ 4.657, -3.314, -3.434],...
E    desired: array([[ 3.983, -2.185, -2.789],
E          [ 3.971,  2.846,  2.078],
E          [ 4.668, -3.487, -3.213],...
_____________ TestMain.test_mol[CCCCCCCCCC[N+][C][C]CCCCCCCCCC@N1] _____________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 71 (0%)
E   Mismatched atoms:              70 / 71 (99%)
E   Mismatched atomic symbols:     23 / 71 (32%)
E   Atoms max absolute difference: 1.4658656167658575
E   Atoms max relative difference: 83.65651864559885
E    actual: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 5.9100e-01, -2.0000e-03, -1.3780e+00],
E          [ 7.7600e-01, -8.6700e-01,  9.5500e-01],...
E    desired: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 7.7600e-01,  3.1300e-01, -1.2520e+00],
E          [ 5.9200e-01, -1.1470e+00,  7.6400e-01],...
________________ TestMain.test_mol[CCCCCCCCC[CCCCCC]C[=O]O@O17] ________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 50 (0%)
E   Mismatched atoms:              50 / 50 (100%)
E   Mismatched atomic symbols:     18 / 50 (36%)
E   Atoms max absolute difference: 1.9054727118818675
E   Atoms max relative difference: 57.82825215885746
E    actual: array([[ 2.323,  0.648, -0.703],
E          [ 2.906,  0.569,  0.727],
E          [ 2.567, -0.645, -1.529],...
E    desired: array([[ 2.478,  0.273,  0.279],
E          [ 3.405,  0.111, -0.95 ],
E          [ 3.061,  1.223,  1.363],...
___________________ TestMain.test_mol[CCCCCCCCNCCCCCCCC@N17] ___________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 52 (0%)
E   Mismatched atoms:              52 / 52 (100%)
E   Mismatched atomic symbols:     17 / 52 (33%)
E   Atoms max absolute difference: 0.03831557434947497
E   Atoms max relative difference: 1.0
E    actual: array([[ 3.361,  3.737,  0.018],
E          [ 3.635, -3.377, -0.796],
E          [ 4.132,  4.726,  0.898],...
E    desired: array([[ 3.36 ,  3.637,  0.857],
E          [ 3.635, -3.111, -1.535],
E          [ 4.132,  4.403,  1.938],...
_______________________ TestMain.test_mol[CCCCCCCCO@O9] ________________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 27 (0%)
E   Mismatched atoms:              5 / 27 (19%)
E   Mismatched atomic symbols:     2 / 27 (7%)
E   Atoms max absolute difference: 0.013943408383097267
E   Atoms max relative difference: 1.0
E    actual: array([[ 4.911, -0.041, -0.474],
E          [ 6.244,  0.151,  0.259],
E          [ 3.725,  0.151,  0.479],...
E    desired: array([[ 4.911, -0.098, -0.465],
E          [ 6.244,  0.181,  0.239],
E          [ 3.725,  0.208,  0.458],...
_______________________ TestMain.test_mol[CCCCCCCCN@N9] ________________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 28 (0%)
E   Mismatched atoms:              28 / 28 (100%)
E   Mismatched atomic symbols:     9 / 28 (32%)
E   Atoms max absolute difference: 0.7988422625040431
E   Atoms max relative difference: 433.6202146821628
E    actual: array([[ 4.986,  0.411,  0.031],
E          [ 6.309, -0.361, -0.027],
E          [ 3.788, -0.544, -0.04 ],...
E    desired: array([[ 4.953,  0.479,  0.188],
E          [ 6.297, -0.162, -0.179],
E          [ 3.781, -0.402, -0.261],...
___________________ TestMain.test_mol[CCCCCCCCOCCCCCCCC@O17] ___________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 51 (0%)
E   Mismatched atoms:              51 / 51 (100%)
E   Mismatched atomic symbols:     17 / 51 (33%)
E   Atoms max absolute difference: 10.619717625139197
E   Atoms max relative difference: 18.252201013628
E    actual: array([[ 2.201,  2.905,  3.339],
E          [ 1.521, -3.803, -2.731],
E          [ 2.38 ,  4.348,  3.827],...
E    desired: array([[ 1.521,  3.398, -3.221],
E          [ 2.199, -3.828,  2.224],
E          [ 2.453,  4.595, -3.447],...
___________________ TestMain.test_mol[CCCCCCCCC[=O][O-]@O11] ___________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 28 (0%)
E   Mismatched atoms:              28 / 28 (100%)
E   Mismatched atomic symbols:     11 / 28 (39%)
E   Atoms max absolute difference: 0.587513165061302
E   Atoms max relative difference: 2.876356200754237
E    actual: array([[ 5.619, -0.466, -0.299],
E          [ 6.967, -0.354,  0.423],
E          [ 4.538,  0.344,  0.426],...
E    desired: array([[ 5.6190e+00,  5.5300e-01,  4.0000e-03],
E          [ 6.9670e+00,  7.3000e-02, -5.4700e-01],
E          [ 4.5380e+00, -5.1900e-01, -1.7600e-01],...
_______________________ TestMain.test_mol[CCCCCCCCS@S9] ________________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 27 (0%)
E   Mismatched atoms:              18 / 27 (67%)
E   Mismatched atomic symbols:     6 / 27 (22%)
E   Atoms max absolute difference: 0.035392630152596964
E   Atoms max relative difference: 1.7266079468597542
E    actual: array([[ 5.259, -0.288, -0.374],
E          [ 6.619,  0.267,  0.067],
E          [ 4.11 ,  0.464,  0.31 ],...
E    desired: array([[ 5.259, -0.166, -0.441],
E          [ 6.619,  0.236,  0.142],
E          [ 4.11 ,  0.353,  0.432],...
_____________ TestMain.test_mol[cis-CCCCCCCCC=CCCCCCCCC[=O]O@O19] ______________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 54 (0%)
E   Mismatched atoms:              53 / 54 (98%)
E   Mismatched atomic symbols:     20 / 54 (37%)
E   Atoms max absolute difference: 2.4421088146280545
E   Atoms max relative difference: 952.6685533634258
E    actual: array([[ 1.6038e+01,  3.7300e-01, -1.0930e+00],
E          [ 1.6670e+01,  1.7320e+00, -1.4160e+00],
E          [ 5.5990e+00, -8.8700e-01,  6.0200e-01],...
E    desired: array([[ 1.6038e+01,  8.1700e-01, -8.1700e-01],
E          [ 1.6670e+01,  5.0700e-01, -2.1790e+00],
E          [ 5.5990e+00, -1.4900e-01,  1.0610e+00],...
________________ TestMain.test_mol[CCCCCCC[CCCCC]CCCC[=O]O@O17] ________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 50 (0%)
E   Mismatched atoms:              50 / 50 (100%)
E   Mismatched atomic symbols:     18 / 50 (36%)
E   Atoms max absolute difference: 2.594354081674596
E   Atoms max relative difference: 28.02485986668024
E    actual: array([[ 5.784, -0.236,  0.075],
E          [ 7.   , -1.201,  0.095],
E          [ 5.652,  0.515,  1.435],...
E    desired: array([[ 5.709, -0.312,  0.028],
E          [ 6.885, -1.114, -0.584],
E          [ 6.111,  0.323,  1.397],...
___________________ TestMain.test_mol[CCCCCCCCSCCCCCCCC@S17] ___________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 51 (0%)
E   Mismatched atoms:              51 / 51 (100%)
E   Mismatched atomic symbols:     17 / 51 (33%)
E   Atoms max absolute difference: 1.2238138857338379
E   Atoms max relative difference: 117.03113510631259
E    actual: array([[ 3.684,  2.057,  3.173],
E          [ 4.014, -2.649, -2.228],
E          [ 4.643,  3.217,  3.465],...
E    desired: array([[ 4.014,  0.722,  3.385],
E          [ 3.684, -1.834, -3.307],
E          [ 4.619,  1.577,  4.506],...
_______________________ TestMain.test_mol[CCCCCCCCP@P9] ________________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 28 (0%)
E   Mismatched atoms:              26 / 28 (93%)
E   Mismatched atomic symbols:     8 / 28 (29%)
E   Atoms max absolute difference: 0.1396562958185361
E   Atoms max relative difference: 2.707397040483221
E    actual: array([[ 5.2750e+00,  3.9300e-01, -6.0000e-03],
E          [ 6.6100e+00, -3.8400e-01,  3.4000e-02],
E          [ 4.0810e+00, -5.4400e-01, -2.1000e-02],...
E    desired: array([[ 5.273,  0.363,  0.101],
E          [ 6.597, -0.367, -0.098],
E          [ 4.085, -0.523, -0.19 ],...
_____________________ TestMain.test_mol[O=C[O]c1ccccc1@O8] _____________________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 15 (0%)
E   Mismatched atoms:              15 / 15 (100%)
E   Mismatched atomic symbols:     9 / 15 (60%)
E   Atoms max absolute difference: 3.206923323132984
E   Atoms max relative difference: 29.48696648245082
E    actual: array([[ 2.485, -0.165,  0.053],
E          [ 2.619,  1.169, -0.373],
E          [ 3.646, -0.924,  0.295],...
E    desired: array([[ 2.485,  0.04 ,  0.169],
E          [ 3.646,  0.221,  0.944],
E          [ 2.619, -0.279, -1.195],...
____________ TestMain.test_mol[trans-CCCCCCCCC=CCCCCCCCC[=O]O@O19] _____________
tests/test_entry_points.py:90: in test_mol
    assert_mol_allclose(mol, mol_ref, rtol=0, atol=10**-2)
E   AssertionError: 
E   Not equal to tolerance rtol=0, atol=0.01
E   
E   Mismatched lattice:            False
E   Mismatched bonds:              0 / 54 (0%)
E   Mismatched atoms:              54 / 54 (100%)
E   Mismatched atomic symbols:     20 / 54 (37%)
E   Atoms max absolute difference: 0.18246937996604368
E   Atoms max relative difference: 3.958486001605863
E    actual: array([[ 1.6878e+01, -5.1400e-01, -9.2900e-01],
E          [ 1.8059e+01,  4.5000e-02, -1.7310e+00],
E          [ 5.6810e+00,  3.5100e-01,  3.1400e-01],...
E    desired: array([[ 1.6878e+01,  4.8000e-02, -1.0600e+00],
E          [ 1.8059e+01,  9.4500e-01, -1.4520e+00],
E          [ 5.6810e+00,  1.3500e-01,  4.5100e-01],...
___________________________________ test_cat ___________________________________
tests/test_indices.py:32: in test_cat
    assertion.eq(set(ligand_df.index), ref)
E   AssertionError: output = eq(a, b); assert output
E   
E   exception: AssertionError = 'None'
E   
E   output: bool = False
E   a: set = {('CCCCCCC(=O)O', 'O8'), ('CCCNCCC(=O)O', 'C5'), ('CCCOCCC(=O)O', 'C5')}
E   b: set = {('CCCCCCC(=O)[O-]', 'O8'), ('CCCNCCC(=O)O', 'C5'), ('CCCOCCC(=O)O', 'C5')}
------------------------------ Captured log call -------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCCCCCC[=O]O@O8 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCCCCCC[=O]O@O8 optimization is successful
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCCOCCC[=O]O@C5 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCCOCCC[=O]O@C5 optimization is successful
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCCNCCC[=O]O@C5 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCCNCCC[=O]O@C5 optimization is successful
INFO     CAT:base.py:132 Total elapsed time: 1.6784 sec
__________________ TestFindSubstructure.test_options[remove] ___________________
tests/test_ligand_anchoring.py:183: in test_options
    np.testing.assert_allclose(coords, coords_ref, atol=10e-3)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0.01
E   
E   Mismatched elements: 53 / 60 (88.3%)
E   Max absolute difference: 0.52868769
E   Max relative difference: 4.65620726
E    x: array([[-3.132869,  0.576224, -0.400106],
E          [-1.650983,  0.806733, -0.434622],
E          [-0.857199, -0.396575,  0.067837],...
E    y: array([[-3.116677,  0.60374 , -0.326707],
E          [-1.635916,  0.841603, -0.414185],
E          [-0.838439, -0.394686,  0.011993],...
________________ TestFindSubstructure.test_options[kind_first] _________________
tests/test_ligand_anchoring.py:183: in test_options
    np.testing.assert_allclose(coords, coords_ref, atol=10e-3)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0.01
E   
E   Mismatched elements: 53 / 60 (88.3%)
E   Max absolute difference: 0.52868769
E   Max relative difference: 4.65620726
E    x: array([[-3.132869,  0.576224, -0.400106],
E          [-1.650983,  0.806733, -0.434622],
E          [-0.857199, -0.396575,  0.067837],...
E    y: array([[-3.116677,  0.60374 , -0.326707],
E          [-1.635916,  0.841603, -0.414185],
E          [-0.838439, -0.394686,  0.011993],...
_________________ TestFindSubstructure.test_options[kind_mean] _________________
tests/test_ligand_anchoring.py:183: in test_options
    np.testing.assert_allclose(coords, coords_ref, atol=10e-3)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0.01
E   
E   Mismatched elements: 53 / 60 (88.3%)
E   Max absolute difference: 0.52868769
E   Max relative difference: 4.65620726
E    x: array([[-3.132869,  0.576224, -0.400106],
E          [-1.650983,  0.806733, -0.434622],
E          [-0.857199, -0.396575,  0.067837],...
E    y: array([[-3.116677,  0.60374 , -0.326707],
E          [-1.635916,  0.841603, -0.414185],
E          [-0.838439, -0.394686,  0.011993],...
____________ TestFindSubstructure.test_options[kind_mean_translate] ____________
tests/test_ligand_anchoring.py:183: in test_options
    np.testing.assert_allclose(coords, coords_ref, atol=10e-3)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0.01
E   
E   Mismatched elements: 53 / 60 (88.3%)
E   Max absolute difference: 0.52868769
E   Max relative difference: 4.65620726
E    x: array([[-3.132869,  0.576224, -0.400106],
E          [-1.650983,  0.806733, -0.434622],
E          [-0.857199, -0.396575,  0.067837],...
E    y: array([[-3.116677,  0.60374 , -0.326707],
E          [-1.635916,  0.841603, -0.414185],
E          [-0.838439, -0.394686,  0.011993],...
___________________ TestFindSubstructure.test_options[angle] ___________________
tests/test_ligand_anchoring.py:183: in test_options
    np.testing.assert_allclose(coords, coords_ref, atol=10e-3)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0.01
E   
E   Mismatched elements: 53 / 60 (88.3%)
E   Max absolute difference: 0.52868769
E   Max relative difference: 4.65620726
E    x: array([[-3.132869,  0.576224, -0.400106],
E          [-1.650983,  0.806733, -0.434622],
E          [-0.857199, -0.396575,  0.067837],...
E    y: array([[-3.116677,  0.60374 , -0.326707],
E          [-1.635916,  0.841603, -0.414185],
E          [-0.838439, -0.394686,  0.011993],...
_______________________ TestFindSubstructure.test_split ________________________
tests/test_ligand_anchoring.py:200: in test_split
    assertion.eq(mol1.properties.smiles, '[NH-]C(O)C(=O)O')
E   AssertionError: output = eq(a, b); assert output
E   
E   exception: AssertionError = 'None'
E   
E   output: bool = False
E   a: str = 'NC(O)C(=O)O'
E   b: str = '[NH-]C(O)C(=O)O'
__________________________ test_init_ligand_anchoring __________________________
tests/test_ligand_anchoring.py:245: in test_init_ligand_anchoring
    assertion.eq(df.index.tolist(), idx)
E   AssertionError: output = eq(a, b); assert output
E   
E   exception: AssertionError = 'None'
E   
E   output: bool = False
E   a: list = [('CO', 'O2'), ('CCO', 'O3')]
E   b: list = [('C[O-]', 'O2'), ('CC[O-]', 'O3')]
------------------------------ Captured log call -------------------------------
INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
______________________ TestDihedral.test_atoms[dihed_45] _______________________
tests/test_ligand_attach.py:132: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 135 / 915 (14.8%)
E   Max absolute difference: 0.002
E   Max relative difference: 0.00035286
E    x: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
E    y: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CC[=O]O@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CC[=O]O@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.7664 sec
____________________ TestDihedral.test_atoms[dihed_45_deg] _____________________
tests/test_ligand_attach.py:132: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 135 / 915 (14.8%)
E   Max absolute difference: 0.002
E   Max relative difference: 0.00035286
E    x: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
E    y: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CC[=O]O@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CC[=O]O@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.7804 sec
______________________ TestDihedral.test_atoms[dihed_180] ______________________
tests/test_ligand_attach.py:132: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 151 / 915 (16.5%)
E   Max absolute difference: 0.001
E   Max relative difference: 0.0003095
E    x: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
E    y: array([[12.318, 13.562, 10.963],
E          [12.417, 10.883, 14.27 ],
E          [10.032, 14.341, 14.385],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CC[=O]O@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CC[=O]O@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.7596 sec
______________________ TestAllignment.test_atoms[sphere] _______________________
tests/test_ligand_attach.py:174: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.atoms_ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 418 / 645 (64.8%)
E   Max absolute difference: 0.316
E   Max relative difference: 8.35294118
E    x: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 1.0000e+00,  0.0000e+00,  0.0000e+00],
E          [-1.0000e+00,  0.0000e+00,  0.0000e+00],...
E    y: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 1.0000e+00,  0.0000e+00,  0.0000e+00],
E          [-1.0000e+00,  0.0000e+00,  0.0000e+00],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCO@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCO@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.5938 sec
______________________ TestAllignment.test_atoms[surface] ______________________
tests/test_ligand_attach.py:174: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.atoms_ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 457 / 645 (70.9%)
E   Max absolute difference: 0.005
E   Max relative difference: 0.05
E    x: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 1.0000e+00,  0.0000e+00,  0.0000e+00],
E          [-1.0000e+00,  0.0000e+00,  0.0000e+00],...
E    y: array([[ 0.0000e+00,  0.0000e+00,  0.0000e+00],
E          [ 1.0000e+00,  0.0000e+00,  0.0000e+00],
E          [-1.0000e+00,  0.0000e+00,  0.0000e+00],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCO@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCO@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.5983 sec
___________________ TestAllignment.test_atoms[sphere_invert] ___________________
tests/test_ligand_attach.py:174: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.atoms_ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 430 / 645 (66.7%)
E   Max absolute difference: 3.068
E   Max relative difference: 12.16157205
E    x: array([[ 0.000e+00,  0.000e+00,  0.000e+00],
E          [ 1.000e+00,  0.000e+00,  0.000e+00],
E          [-1.000e+00,  0.000e+00,  0.000e+00],...
E    y: array([[ 0.000e+00,  0.000e+00,  0.000e+00],
E          [ 1.000e+00,  0.000e+00,  0.000e+00],
E          [-1.000e+00,  0.000e+00,  0.000e+00],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCO@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCO@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.6097 sec
__________________ TestAllignment.test_atoms[surface_invert] ___________________
tests/test_ligand_attach.py:174: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.atoms_ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 432 / 645 (67%)
E   Max absolute difference: 0.005
E   Max relative difference: 0.25
E    x: array([[ 0.000e+00,  0.000e+00,  0.000e+00],
E          [ 1.000e+00,  0.000e+00,  0.000e+00],
E          [-1.000e+00,  0.000e+00,  0.000e+00],...
E    y: array([[ 0.000e+00,  0.000e+00,  0.000e+00],
E          [ 1.000e+00,  0.000e+00,  0.000e+00],
E          [-1.000e+00,  0.000e+00,  0.000e+00],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCO@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCO@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.6109 sec
________________________ TestCoreAnchor.test_atoms[HCl] ________________________
tests/test_ligand_attach.py:233: in test_atoms
    np.testing.assert_allclose(atoms.coords, output.atoms_ref.coords)
E   AssertionError: 
E   Not equal to tolerance rtol=1e-07, atol=0
E   
E   Mismatched elements: 69 / 543 (12.7%)
E   Max absolute difference: 0.005
E   Max relative difference: 3.
E    x: array([[-2.2890e+00, -1.4400e+00,  4.4400e+00],
E          [-3.1800e-01,  2.3290e+00,  4.3260e+00],
E          [-3.9990e+00,  1.7730e+00,  2.3770e+00],...
E    y: array([[-2.2890e+00, -1.4400e+00,  4.4400e+00],
E          [-3.1800e-01,  2.3290e+00,  4.3260e+00],
E          [-3.9990e+00,  1.7730e+00,  2.3770e+00],...
------------------------------ Captured log setup ------------------------------
INFO     CAT:base.py:101 Starting CAT (version: 1.0.1.dev0)
INFO     CAT:base.py:103 The optional Nano-CAT package was successfully found (version: 0.7.2.dev0)
INFO     CAT:base.py:110 The optional Data-CAT package was successfully found (version: 0.7.3.dev0)

INFO     CAT:create_database.py:72 ligand_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating ligand database
INFO     CAT:create_database.py:72 qd_database.csv not found in /home/runner/work/CAT/CAT/tests/test_files/database, creating qd database
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'core_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'ligand_no_opt'
INFO     CAT:create_database.py:251 Updating h5py Dataset to data-CAT >= 0.4 style: 'qd_no_opt'
INFO     CAT:workflow.py:396 Starting ligand geometry optimization
INFO     CAT:ligand_opt.py:162 UFFGetMoleculeForceField: CCO@O3 optimization has started
INFO     CAT:ligand_opt.py:172 UFFGetMoleculeForceField: CCO@O3 optimization is successful
INFO     CAT:workflow.py:396 Starting quantum dot construction
INFO     CAT:workflow.py:422 Finishing quantum dot construction

INFO     CAT:base.py:132 Total elapsed time: 1.7396 sec
______________________________ test_set_mol_prop _______________________________
tests/test_mol_import.py:160: in test_set_mol_prop
    assertion.eq(at.properties, ref1)
E   AssertionError: output = eq(a, b); assert output
E   
E   exception: AssertionError = 'None'
E   
E   output: bool = False
E   a: Settings =
E       Settings(
E           rdkit:
E               stereo:    Settings()
E           pdb_info:
E               ResidueName:    'LIG'
E               Occupancy:    1.0000
E               TempFactor:    0.0000e+00
E               ResidueNumber:    1
E               ...
E           charge:    0
E       )
E   b: Settings =
E       Settings(
E           stereo:    Settings()
E           charge:    0
E           pdb_info:
E               ResidueName:    'LIG'
E               Occupancy:    1.0000
E               TempFactor:    0.0000e+00
E               ResidueNumber:    1
E               ...
E       )
______________________________ test_fix_carboxyl _______________________________
tests/test_mol_utils.py:115: in test_fix_carboxyl
    assertion.eq(round(angle), 120)
E   AssertionError: output = eq(a, b); assert output
E   
E   exception: AssertionError = 'None'
E   
E   output: bool = False
E   a: int = 9
E   b: int = 120
=============================== warnings summary ===============================
../../../../../opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/FOX/armc/package_manager.py:38
  /opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/FOX/armc/package_manager.py:38: QMFlowsDeprecationWarning: `qmflows.packages.cp2k_package` is a deprecated alias for `qmflows.packages`
    from qmflows.packages.cp2k_package import CP2K, CP2K_Result

../../../../../opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/nanoCAT/cdft.py:8
  /opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/nanoCAT/cdft.py:8: QMFlowsDeprecationWarning: `qmflows.packages.SCM` is a deprecated alias for `qmflows.packages`
    from qmflows.packages.SCM import ADF_Result

../../../../../opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/nanoCAT/recipes/multi_lig_job.py:38
  /opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/nanoCAT/recipes/multi_lig_job.py:38: QMFlowsDeprecationWarning: `qmflows.packages.cp2k_mm` is a deprecated alias for `qmflows.packages`
    from qmflows.packages.cp2k_mm import CP2KMM_Result

tests/test_entry_points.py: 1 warning
tests/test_indices.py: 1 warning
tests/test_ligand_attach.py: 16 warnings
tests/test_thread_safe.py: 2 warnings
  /opt/hostedtoolcache/Python/3.10.6/x64/lib/python3.10/site-packages/dataCAT/database.py:384: FutureWarning: In a future version, `df.iloc[:, i] = newvals` will attempt to set the values inplace instead of always setting a new array. To retain the old behavior, use either `df[df.columns[i]] = newvals` or, if columns are non-unique, `df.isetitem(i, newvals)`
    db.update(hdf5_series, overwrite=True)

Error running CAT

I am running CAT using the following input:

input:
 input_cores:
- /home/user/Primer/Python/flamingo/tests/files/Cd68Se55.xyz:
    guess_bonds: false
input_ligands:
- /tmp/pytest-of-user/pytest-3/test_compute_bulkiness0/cat_workdir/0/smiles.txt
optional:
  ligand:
    cosmo-rs: false
    functional_groups:
    - O(C=O)[H]
  qd:
    bulkiness: true
path: /tmp/pytest-of-user/pytest-3/test_compute_bulkiness0/cat_workdir/0

Where smiles contains the following input:

CCCCCCCCC=CCCCCCCCC(=O)O
CC(=O)O
O=C(O)Cc1ccccc1
CC(O)C(=O)O

I got the following error:

lamingo/cat_interface.py:107: in call_cat                                                                                                                                                                   
    prep(inp)                                                                                                                                                                                                
../../../miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py:118: in prep                                                                                                                       
    core_df = prep_core(core_df)                                                                                                                                                                             
../../../miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/base.py:236: in prep_core                                                                                                                  
    raise MoleculeError(f"{repr(to_symbol(anchor))} was specified as core anchor atom, yet "                                                                                                                 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                                                                                                                                                                                                             
value = None                                                                                                                                                                                                 
                                                   
    def to_symbol(value: Union[str, int, Atom]) -> str:
        """Turn an atomic number into an atomic symbol.
                   
        Parameters                                                                                    
        ----------
        value : |int|_ or |str|_
            An Atom, atomic symbol or number.                                                         
                                                                                                      
        Returns                                                                                       
        -------                                                                                       
        |int|_                                                                                        
            An atomic symbol.                                                                         
                                                                                                      
        Raises                                                                                        
        ------                                                                                        
        TypeError                                                                                     
            Raised if **item** is an instance of neither :class:`str` nor :class:`int`.
                                                                                                      
        """                                                                                           
        if isinstance(value, int):                                                                    
            try:                                                                                      
                return PeriodicTable.get_symbol(value)                  
            except PTError as ex:   
                ex.args = (ex.args[0] + f': {repr(value)}',)
                raise ex
        elif isinstance(value, str):                                                                                                                                                                         
            if value not in PeriodicTable.symtonum.keys():                                                                                                                                                   
                raise PTError(f'trying to convert incorrect atomic symbol: {repr(value)}')                                                                                                                   
            return value                                                                              
     
        try:
            return value.symbol
        except AttributeError as ex:
>           raise TypeError("'value' expected an Atom or atomic symbol/number; "
                            f"observed type: '{value.__class__.__name__}'") from ex
E           TypeError: 'value' expected an Atom or atomic symbol/number; observed type: 'NoneType'

../../../miniconda3/envs/insilico/lib/python3.8/site-packages/CAT/mol_utils.py:272: TypeError

Changing only ligand chain

Hi Bas,

we have a NC core capped with acetates and we would like to replace these acetates by a series of other carboxylic acids (for example oleic acid) while keeping the anchoring group in the exact same position. In practice instead of having dummy atoms in the input structure we already have ligands for which we would like to change only the alkylic chain.
Is that already feasible in CAT or can you maybe add a function to do it?
Thanks in advance!

Failed to employ polyatomic core anchors

Hello there,
I'm trying to use the new option
core.optional.allignment = "anchor"
but it's apparently failing with this error message:

Traceback (most recent call last):
  File "C:\Users\jzito\Miniconda3\envs\escience\Scripts\init_cat-script.py", line 33, in <module>
    sys.exit(load_entry_point('nlesc-CAT', 'console_scripts', 'init_cat')())
  File "c:\users\jzito\escience\cat\CAT\data_handling\entry_points.py", line 62, in main
    base.prep(extract_args(args), return_mol=False)
  File "c:\users\jzito\escience\cat\CAT\base.py", line 121, in prep
    core_df = prep_core(core_df)
  File "c:\users\jzito\escience\cat\CAT\base.py", line 220, in prep_core
    idx_tuples = [set_core_anchors(i, anchor_tup, allignment_tup, subset) for i in core_df[MOL]]
  File "c:\users\jzito\escience\cat\CAT\base.py", line 220, in <listcomp>
    idx_tuples = [set_core_anchors(i, anchor_tup, allignment_tup, subset) for i in core_df[MOL]]
  File "c:\users\jzito\escience\cat\CAT\attachment\core_anchoring.py", line 51, in set_core_anchors
    anchor_idx = anchor_idx_group[:, anchor_tup.group_idx[0]].copy()
IndexError: too many indices for array

Here are the core and input files.

path: .

input_cores:
        - geo_opt.xyz

input_ligands:
        - CCC(=O)O

optional:
    database:
            mol_format: ['xyz']

    core:
        dirname: core
        allignment: "anchor"  # Define the core vectors based on the dummy acetate's vectors
        anchor:
            group: "[O-]C(C([H])([H])[H])=O"  # Acetate anion (with explicit hydrogens!)
            group_idx: [0, 6]  # Represent the anchor by the mean position of both oxyanions
            kind: "mean"
            remove: [0, 1, 2, 3, 4, 5, 6]  # Remove the entirety of the dummy acetate

    ligand:
        dirname: ligand
        split: True

    qd:
        dirname: qd
        construct_qd: True
        optimize: False

Can you help me with this?

Investigate multi-ligand quantum dot optimizations

Currently it is not possible to use multi-ligand quantum dots for any further workflows, including geometry optimizations.

There are two main options for optimizing such structures.

  1. Integrate it with the main geometry optimization workflow.
  2. Create a stand-alone recipe for multi-ligand optimizations in Nano-CAT.

Depending on the amount of required work either 1. or 2. can be implemented, with 2. having my preference as of the moment.

Add the functionality as a recipe

  • The parts which are focused on the attachment should go in CAT.attachment.
  • The parts focused in managing the dye-related workflows should go in their own separate module or set of modules (something like CAT.dye. ... perhaps ?).

Example

>>> from CAT.recipes import fancy_dye_workflow
>>> fancy_dye_workflow(...)

Or maybe even a command line interface.

>>> python fancy_dye_workflow
...

Error specifying custom job type

When calling CAT with the following input:

  path: "."

  input_cores:
     - "[H]Cl"

  input_ligands:
    - "{smile}"

  optional:
      qd:
        construct_qd: False
      ligand:
        cosmo-rs: True
        cdft: True
        functional_groups: ['O(C=O)[H]']
        optimize:
          job2: ADFJob
          s2:
            input:
              xc:
                hybrid:
                  b3lyp
              basis:
                type: DZP
                core: None
                createoutput: None

CAT produces the following erroneous ADF input:

basis
  core None
  createoutput None
  type DZP
end

charge -1

geometry
  optim delocal
end

numericalquality good

scf
  converge 1e-6
  iterations 100
end

xc
  hybrid b3lyp
  lda
end

Where the lda functional has been added even though the user have defined a functional

Give the user control over functional group recognition

Give the user more control over the functional group recognition.

  1. Create a few presets of common functional groups, presets which can be selected by the user.
  2. Allow the user to supply his/her own presets (i.e. SMILES string representing a functional group).

Ligand order in CAT

Hi Bas,

In the ligand_order.zip directory, I have attached the files I have been working with. I wanted to attach a DDA ligand (dda.xyz) to a NC core (nc.xyz) I have, and I want the order of the ligand atoms to be the same as the .xyz file. I have tried bypassing the smiles string and directly providing the .xyz file to CAT, but the atom order isn't preserved (as shown by nc_cat.xyz and dda_cat.xyz). Am I missing something in the .yaml script, or could you maybe add an additional keyword to do it?
Thanks in advance!

Name too long

Error in writing xyz files of ligands associated to long SMILES
OSError: [Errno 36] File name too long: '/scratch-shared/hpc17nj02a/geo_opt/10/ligand/C[C@@h]1O[C@H][OC[=O][C@]23CCC[C][C]CC2C2=CCC4[C@@]5[C]C[C@H][O][C@H][O[C@@h]6O[C@H][CO][C@@h][O][C@H][O][C@H]6O][C@@][C][C[=O]O][C@@h]5CC[C@@]4[C][C@]2[CO]CC3][C@@h][O[C@H]2O[C@H][C][C@@h][O[C@@h]3OC[C@@h][O[C@@h]4OC[C@][O][CO][C@H]4O][C@H][O][C@H]3O[C@H]3O[C@@h][CO][C@@h][O][C@@h][O][C@@h]3O][C@H][O][C@@h]2O][C@H][O][C@@h][email protected]'

Find an unique string-based representation for QD cores

Currently all ligands are represented by a unique SMILES string, try to find a similar unique identifier for the cores. More specifically, find a solution for cores with ill-defined connectivity.

In the mean time, the molecular formula is used.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.