= Attendees = * Elaine, Greg, Eric, TomG, TomF, Scooter (via Zoom) = Agenda = * ChimeraX registration * ChimeraX 0.6 performance * Review milestone priorities * Wildcard/regex/case matching in commands = Discussion = * ChimeraX registration code ''almost'' works, Conrad will look into it * ChimeraX 0.6 performance - From last meeting - Looking up bfactor (1 million times): - ChimeraX: - ctypes: 1.38s - custom library with property wrapping: 0.5s - custom library with no wrapping: 0.185s - random floating point attribute in Python: 0.072s - '''Cython with no wrapping: 0.021s''' - loop is in Cython - '''Cython with no wrapping: 0.156s''' - loop is in Python - Chimera 1: - access bfactor via wrappy2: 0.062s - '''custom library with no wrapping: 0.181s''' - Collect data - Cython is really fast - New Results - Cythonize Atom into Python type? method: '''0.098s'''; property: ~~'''0.119s'''~~ - bfactor property - straight type '''0.080s''' - class inheriting type '''0.092s''' - !__dict!__ enabled '''0.082s'''; ''doesn't inherit non-builtin class attrs'' - coord property - returning numpy '''1.48s''' - returning tuple '''0.103s''' - Cythonize Atom methods? function: '''0.074s'''; method: '''0.204s'''; prop: '''0.135s''' - Cythonize hydrogen bond code? How hard is this? - Cythonize '''Atom''' (2ajq; 14791 atoms; ''contacts'': chain A against others) - addh '''1.1x faster''' (22.21s -> 20.14s) - hbonds '''1.04x faster''' (3.44s -> 3.30s) - contacts '''1.3x faster''' (0.444s -> 0.333s) - Cythonize '''Atom''' + '''Element''' - addh '''1.4x faster''' (22.21s -> 15.71s) - hbonds '''1.2x faster''' (3.44s -> 2.81s) - contacts '''1.8x faster''' (0.444s -> 0.253s) - Cythonize '''Atom''' + '''Element''' and use '''tinyarray''' - addh '''1.8x faster''' (22.21s -> 12.63s) [C1: 8.68s] - hbonds '''1.3x faster''' (3.44s -> 2.64s) [C1: 3.04s] - contacts '''2.1x faster''' (0.444s -> 0.211s) [C1: 0.216s] - Above plus trivial Cythonization of module - contacts '''2.7x faster''' (0.444s -> 0.164s) - Approach - Cythonize major objects (ctypes) - !Atom/Atoms - !Bond/Bonds - !Residue/Residues - Maybe higher level objects - Profile code and change data structures/algorithms to improve performance - Cythonize as it makes sense = Action Items = * Eric will convert Atom to Cython * Conrad will write bundle code tutorial * Conrad will continue working on ribbon tickets * Conrad will create ticket to investigate implementing the "like" operator - e.g., to specify polymer in atomspec