Skip to content

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Apr 15:42
· 42 commits to main since this release

CHANGELOG

v2.1.0 (2025-04-30)

Chores

Features

  • Add runtime comparison script
    (36775ed)

Refactoring

v2.0.6 (2025-04-29)

Bug Fixes

  • Make database more robust for jupyter notebook
    (804a8ff)

Chores

  • Add UniProt projection example tailed for Colab experience
    (#12,
    e287d01)

Summary This PR significantly improves the aesthetics and user experience of the

uniprot_projection.py example when viewed as a Google Colab notebook. The changes focus on visual
enhancements and interactive elements while maintaining the same functionality. ## Changes - Added
styled section headers with custom backgrounds and borders - Implemented interactive progress bars
for processing steps - Added color-coded status messages with appropriate icons (✅, ⚠️, ℹ️, ❌) -
Improved error and warning displays with formatted message boxes - Enhanced SVG display with
additional protein information card - Added visual feedback during long-running operations -
Improved configuration display with formatted tables - Added completion banner at the end of
execution - Added professional footer with attribution - Fixed cell structure for proper Colab
execution

Motivation The notebook acts as a demonstration tool for FlatProt functionality. These visual

enhancements make it more professional-looking and easier to follow for users exploring the tool
through Colab. The interactive elements also provide better feedback during execution.

Testing Tested in Google Colab environment to ensure all visual enhancements render correctly and

all functionality remains intact.

  • Fix foldseek command test
    (b88a168)

Documentation

  • Add better workflow description
    (8dc7a0a)

  • Add PR rule to cursorrules
    (0457605)

Refactoring

v2.0.5 (2025-04-28)

Bug Fixes

  • Refactor DB utils and update examples
    (84abd4d)

This PR introduces several improvements to the handling of the alignment database and updates the
chainsaw.py example accordingly. Key Changes: Database Utilities (src/flatprot/utils/database.py):
Refactored DEFAULT_DB_DIR to use platformdirs for a standard, cross-platform data location
(rostlab/flatprot). Updated DEFAULT_DB_URL to point to the correct Zenodo archive
(alignment_db.zip). Added verify=False to the httpx client during download to mitigate potential
SSL certificate verification errors (includes a warning log). Improved the archive extraction
logic in download_database to: Extract to a temporary location. Specifically look for the
alignment_db folder within the archive. Move the contents of alignment_db to the final target
directory. Ignore other files/folders in the archive (like __MACOSX). Adjusted logging levels for
better clarity during download/extraction. Chainsaw Example (examples/chainsaw.py): Updated the
script to use the new flatprot.utils.database.ensure_database_available function to locate or
download the alignment database, removing hardcoded paths. Commented out Colab-specific shell
commands (!pip, !wget, etc.) to resolve linter errors and ensure the file is valid Python syntax.
Added the missing import for ensure_database_available. Motivation: To make the alignment database
download and storage more robust and platform-independent. To resolve issues related to SSL
verification and archive structure during database download. To ensure the example script utilizes
the centralized database handling logic. To fix linter errors in the example script.

Chores

v2.0.4 (2025-04-28)

Bug Fixes

v2.0.3 (2025-04-28)

Continuous Integration

v2.0.2 (2025-04-28)

Chores

Automated generation of Jupyter notebooks from example Python scripts. Changes detected in
examples/*.py.

Co-authored-by: t03i t03i@users.noreply.github.com

Continuous Integration

  • Add deps to docs-release
    (c4bfb08)

  • Add labels permission
    (4fb5d23)

  • Add repo checkout to finalize-release
    (41885a6)

  • Update notebook pull request
    (d23e6b6)

  • Update pull request permissions
    (c4ad0dc)

Documentation

v2.0.1 (2025-04-22)

v2.0.0 (2025-04-22)

Bug Fixes

  • Add - to allow for negative coords
    (f4df4a0)

  • Add connection styles
    (771c228)

  • Add opacity drawing
    (2d54351)

  • Better checkpoint usage
    (a1f1f0c)

  • Connection calculation
    (5a6b9ab)

  • Dix dssp parsing
    (ed3fc37)

  • Filter for target db now working
    (27b12c6)

  • Import issues
    (563ba83)

  • Improve error handling in alignment and transformation matrix
    (466356e)

  • Enhanced error handling in the align_structure_rotation function by reintroducing specific
    handling for FlatProtError, ensuring consistent logging of error messages. - Added validation
    checks in the from_array and from_string methods of the TransformationMatrix class to ensure
    input arrays conform to expected dimensions, raising appropriate ValueError exceptions when
    necessary. - Updated docstrings for clarity and compliance with PEP257.

  • Improve error handling in SVG rendering process
    (f1b310d)

  • Wrapped the SVG rendering and saving logic in a try...except block to capture and log errors
    during the rendering process. - Added logging for exceptions raised during SVG rendering,
    providing clearer context for failures. - Removed the broad try...except block in the annotation
    processing to allow errors to propagate, improving error visibility. - Updated docstrings for
    clarity and compliance with PEP257.

  • Metadata
    (bd38488)

  • Put params in correct position
    (d882b82)

  • Resolve alignment loading issues
    (a6b62c2)

  • Resolve default style not applied
    (9b0e275)

  • Resolve issues with invalid report
    (ed01efc)

  • Resolve representative issues
    (f0195b5)

  • Scop parser excludes discontinous domains
    (486937d)

  • Scop parsing for negative numbers
    (9fcaa2a)

  • Short helix coordinate-computation
    (5eca824)

  • Snakefile again
    (4fc8967)

  • Snakemake
    (02ba248)

  • Syntax error
    (110a916)

  • Update connection tests
    (7ea28d0)

  • Update db creation
    (1912742)

  • Update dependencies
    (fbce3a7)

  • Update pipeline for proper foldseek path
    (2e29b7f)

  • Update snakemake config
    (6ab9152)

  • Update tests
    (1f93a71)

  • Update tests to better connection rendering
    (d2ef4d7)

  • Update the foldseek rotation to be correct
    (47810c7)

Chores

  • Add command scaffold for align
    (27f4b92)

  • Add fixtures and tests for multi-chain SVG rendering
    (ece32bf)

  • Introduced new pytest fixtures to create mock structures with two chains for testing. - Added
    tests to ensure that connections are not drawn between elements of different chains. - Enhanced
    existing tests for rendering elements to improve clarity and consistency. - Updated docstrings for
    new fixtures and tests to comply with PEP257.

  • Add linter ignore
    (bd6315b)

  • Add project integration tests
    (5a205cc)

  • Add scaffold db creation script
    (25720d4)

  • Add tests for utils
    (e0c6e4c)

  • Add workflow for notebooks
    (523ad8f)

  • Fix svg_render test
    (8550c3d)

  • Fix test attribute
    (c4ef6d5)

  • Reenable large files
    (33f0a6d)

  • Update
    (818717e)

Code Style

Continuous Integration

Documentation

  • Add API documentation
    (60d4b24)

  • Add example data
    (7193627)

  • Correct foldseek command
    (1a8f833)

  • Improve description
    (d706a55)

  • Update docs to reflect commandline interface
    (b6fee15)

  • Update documentation
    (04e6cca)

  • Update documentation for align
    (c01345b)

  • Update examples
    (6a1fe16)

  • Update issue templates
    (dfa2d55)

  • Update Readme and add CoC & Contributing
    (6dd9fa3)

Features

  • Add adjacency checks for ResidueRange and ResidueRangeSet
    (af0259f)

  • Implemented is_adjacent_to method in ResidueRange and ResidueRangeSet classes to determine
    adjacency between ranges and coordinates. - Enhanced error handling with TypeError for invalid
    comparisons. - Added comprehensive tests for adjacency functionality in
    tests/core/test_coordinates.py. - Updated docstrings for clarity and compliance with PEP257.

  • Add basic cmd example 3Ftx
    (e13ec95)

  • Add db download functionality
    (6ad7e6e)

  • Add domain reporting
    (f8d230f)

  • Add domain transformation utilities and update examples
    (b1c1043)

  • Introduced DomainTransformation class to encapsulate transformation matrices for specific
    protein domains. - Implemented apply_domain_transformations_masked function to apply
    transformations using boolean masks, ensuring overlapping domains are handled correctly. - Added
    create_domain_aware_scene function to generate scenes with elements grouped by domain, improving
    spatial arrangement and visualization. - Updated examples to reflect new domain transformation
    functionalities and ensure clarity in usage. - Enhanced error handling and logging throughout the
    new utilities. - Updated docstrings and added typing annotations to comply with PEP257 standards.

  • Add example for overlay and annotations
    (de2e0ca)

  • Add improved chainsaw example
    (3e3cbb1)

  • Add initial db pipeline
    (d7bb462)

  • Add runtime analysis
    (4e9ec82)

  • Add uniform projection
    (4e3f185)

  • Enhance SVG rendering with connection point calculations
    (fa29171)

  • Added _prepare_render_data method to SVGRenderer for pre-calculating 2D coordinates and
    connection points for structure elements. - Introduced new utility functions in svg_structure.py
    to calculate connection points for coils, helices, and sheets. - Updated drawing functions to
    utilize the new connection point calculations. - Improved error handling and logging for data
    preparation failures. - Enhanced tests in test_svg_renderer.py to cover new rendering logic and
    connection point assertions. - Updated docstrings for clarity and compliance with PEP257.

  • Integrate staging branch updates introducing breaking changes
    (#8,
    02d2488)

This pull request merges the accumulated features, refactors, and bug fixes from the staging branch
into main. It represents a significant update to the application's core functionality and
structure. Summary of Changes: Integration of various features and improvements developed and
tested on the staging branch. Refactoring of key components to enhance modularity,
maintainability, and performance. Updates to dependencies and build processes. Improvements to
testing infrastructure and documentation.

BREAKING CHANGES: This merge introduces significant breaking changes due to [briefly mention the
reason for the breaking changes, e.g., major API redesign, data model restructuring, CLI command
signature changes]. Compatibility with previous versions deployed from main is broken. Users and
downstream systems will need to adapt to the new interfaces/structures.

Refactoring

  • Add alignment step to commands
    (a0abe56)

  • Add basic scene tests
    (4b6e423)

  • Add connections class
    (c33d01f)

  • Add debug output
    (bef3e4b)

  • Add error handling to scop parsing
    (9dbb2d7)

  • Add family-identity alignment mode as default
    (ebab00e)

  • Add id calculation for annotations
    (030904e)

  • Add label text to svg
    (fe8cf11)

  • Add logfiles
    (982adf6)

  • Add logging output config
    (9aad01a)

  • Add metadata to db
    (3aedb43)

  • Add proper group transforms
    (4639237)

  • Add render tests
    (3632b8c)

  • Add scene integration tests
    (36d7341)

  • Add scene_utils for scene creation
    (162c61f)

  • Add structure id and proper dict iteration
    (aa1479a)

  • Add tests for core elements
    (d3813a3)

  • Add vectorized coordinate manipulation to structure
    (04664d1)

  • Add version
    (0864731)

  • Adopt stateless architecture and enhance documentation
    (#7,
    b1afec6)

Refactor to Stateless Architecture and Enhance Documentation

This pull request introduces a significant refactoring of the codebase to adopt a more stateless
architecture. This change aims to improve predictability, testability, and scalability.

Key changes include:

  • Stateless Refactoring: Core components have been redesigned to operate without maintaining
    internal state where possible. This simplifies the flow of data and reduces potential side
    effects. * Extensive Documentation: Added comprehensive docstrings to functions and classes
    across the project, adhering to PEP 257 conventions. Updated existing documentation to reflect the
    architectural changes. * New Examples: Included several new example scripts in the examples/
    directory to demonstrate the usage of the refactored components and showcase common workflows.
    These examples are designed to be easily convertible to Jupyter notebooks using Jupytext.

Review Focus:

  • Please review the architectural changes for adherence to stateless principles. * Verify the
    clarity and accuracy of the new documentation and examples. * Ensure the refactored code maintains
    existing functionality and passes all tests.

This refactor sets a foundation for future development by improving the overall structure and
maintainability of the codebase.

  • Allow both cif and pdb
    (e6d6b8d)

  • Better 3ftx display
    (8e96271)

  • Bump test family number
    (a827fdc)

  • Change db to be ignored per-default
    (f377fee)

  • Change index off by one issues
    (e64ad11)

  • Change out to tmp
    (118487e)

  • Change to secondary_structure_type
    (d5bc870)

  • Clean up pipeline def
    (46db50f)

  • Cleanup transformation structure
    (3440429)

  • Enhance error handling and update annotations
    (597ae7f)

  • Added CoordinateCalculationError to the core error handling for better clarity in error
    propagation. - Updated the __init__.py file to include the new error class in the module
    exports. - Refactored the annotation tests to improve clarity and ensure proper error handling
    during coordinate calculations. - Enhanced existing tests to cover scenarios where annotations
    return None or invalid shapes, ensuring robust error reporting. - Updated docstrings across
    various files to comply with PEP257 standards.

  • Enhance transformation matrix methods and update docstrings
    (4a2be7f)

  • Refactored the get_aligned_rotation_database function to improve clarity in rotation matrix
    application. - Updated the calculate_inertia_transformation_matrix function's docstring to
    better describe the transformation process and return values. - Renamed the combined_rotation
    method to before in the TransformationMatrix class for improved clarity, and added a new
    after method for combining transformations. - Enhanced the apply method in the
    TransformationMatrix class with additional input validation and updated docstring for clarity. -
    Updated tests for inertia transformation to reflect changes in the transformation logic and ensure
    proper validation of expected outcomes. - Ensured all docstrings comply with PEP257 standards and
    added typing annotations where necessary.

  • Finalize core structure API
    (aa8c4b8)

  • Fix example
    (2cd8aa6)

  • Fix issue
    (35a3826)

  • Fix issues
    (b6e61d9)

  • Fix issues
    (4a4cd28)

  • Fix missing input rule issues
    (e14649d)

  • Fix pipeline end to end
    (d2cf57c)

  • Fix structure tests
    (f9594ea)

  • Fix styles test
    (db49238)

  • Foldseek threads to 4
    (14937ed)

  • Global style rename
    (9dff8ba)

  • Implement chain coordinates
    (84b1621)

  • Implement new structure in commands
    (0a9eeea)

  • Improve annotation calculation logic
    (f0db8d7)

  • Improve clarity for projection
    (13037da)

  • Improve commands naming
    (b03fcf2)

  • Improve naming
    (0925eef)

  • Improve param clarity
    (bdf8a86)

  • Improve scene to handle the annotation coordinates.
    (96400c5)

Extend the scene class and refactor and extend tests to cover the functionality

  • Move alignment results to avoid circular import
    (3bcd220)

  • Move annotation tests to new structure
    (3eb5928)

  • Move checkpoint to pdb download
    (06f25aa)

  • Move data wrangling to utils package
    (20f8313)

  • Move style to notebook
    (5b2f73b)

  • Move to config file
    (83714f7)

  • Overhaul rendering logic to work with improved structure and scene
    (cc5447f)

  • Overhaul scene graph to be more linear and streamlined
    (ec3d400)

  • Proper tempfile handling
    (7790a22)

  • Remove coordinate manager
    (6bd1649)

  • Remove coordinate manager for coordinate transformation
    (8174a24)

  • Remove obsolete tests
    (19848de)

  • Remove old db
    (71ddbcf)

  • Remove style file
    (5c55f54)

  • Remove target_residue_set
    (1db2fa6)

  • Remove unused uniform projection
    (0909676)

  • Rename scene node to element
    (cf985bf)

  • Rename to snakefile
    (03988c2)

  • Status to json
    (bd52157)

  • To allow for domain based
    (63208ff)

BREAKING CHANGE: overhaul coordinate management

  • Tune CPU requirement for faster speeds
    (083cdee)

  • Update annotation handling and error propagation
    (66328db)

  • Refactored annotation classes to utilize a new CoordinateResolver for improved coordinate
    resolution. - Introduced TargetResidueNotFoundError in the scene error handling to enhance
    clarity in error reporting. - Updated the get_coordinates method in annotation classes to accept
    a CoordinateResolver instance, ensuring consistent coordinate retrieval. - Enhanced error
    handling in the SVGRenderer to catch specific errors during annotation processing. - Removed
    outdated tests related to scene coordinate delegation, as this logic is now managed by annotations
    and the resolver. - Updated docstrings across various files to comply with PEP257 standards.

  • Update annotations
    (8fb8a52)

  • Update annotations parser to include style
    (0e8db7c)

  • Update db id
    (a455d5d)

  • Update db path
    (8226d27)

  • Update domain implementation
    (af32432)

  • Update extract domain output
    (0a53495)

  • Update imports
    (04a18ad)

  • Update module paths
    (8714fea)

  • Update numpy typing for projection parameters
    (dddc5a6)

  • Update overlay to regular commands
    (7330b9a)

  • Update projection test and upgrade to better numpydantic library
    (c046245)

  • Update style parser to not use manager
    (aa4e10d)

  • Update styling
    (d5273e1)

  • Update the snakemake pipeline
    (4e83358)

  • Update transformation tests and fix transformation apply issue
    (1e50155)

v1.0.0 (2025-03-17)

Continuous Integration

  • Fix workflow definition
    (a47e74c)

BREAKING CHANGE: overhauls CLI API, installation, and project structure

Breaking Changes

  • Overhauls CLI API, installation, and project structure

v0.2.0 (2025-03-17)

Bug Fixes

  • Add h5py dep
    (a5ba429)

  • Annotation parsing
    (0bc3635)

  • Missing StyleManager issue
    (bcd98a5)

  • Structure mocking
    (0f75ee4)

  • Update matrix dimensions to be properly handled
    (0d6fc02)

Chores

Continuous Integration

Documentation

Features

  • Add annotation parsing and validation
    (e2dc6c7)

  • Add annotation parsing from toml
    (844dc30)

  • Add cli scaffolding
    (9564b9b)

  • Add matrix loader
    (e271745)

  • Add style parsing
    (536684c)

Refactoring

  • Adapt file test to refactored code
    (8832568)

  • Add coordinate manager tests
    (3289be4)

  • Add dssp option and validation
    (3b06594)

  • Add integration tests
    (ce4bfc5)

  • Add logging and verbosity control
    (ca577b5)

  • Add scene utils tests
    (9db6bb1)

  • Add string representation
    (d4002cd)

  • Add structure validation and remove tests
    (e9df138)

  • Add svg creation tests
    (0fe06a1)

  • Add tests for style utils
    (9ff21e8)

  • Add transformation utils
    (bbbccab)

  • Allow for console output of svg
    (1d7f925)

  • Centralize cli fixtures
    (1f6af7a)

  • Change utils structure
    (137af54)

  • Fix integration tests
    (a9aabfc)

  • Fix scene structure parsing
    (684095c)

  • Fix styling
    (f99be5c)

  • Fix test cases
    (44ace30)

  • Fix test to work with point index
    (cf993e8)

  • Fix the local index calculation
    (b642eec)

  • Fix utils test to accept logger
    (b54633e)

  • Implement detailed error logging
    (e17e45a)

  • Improve tests to be behavior oriented
    (573a0d1)

  • Move composer to utils
    (54c95e8)

  • Move errors into io
    (f55265b)

  • Move tests to folder structure
    (cad5923)

  • Move to pytest-mock
    (2fb88cf)

  • Remove debug output
    (c668841)

  • Remove debug print
    (3fa2ca9)

  • Remove unused import
    (d05b17b)

  • Rename to point index
    (ff84fab)

  • Switch transformation loading to coordinate manager
    (02d3835)

  • Update function names
    (9c99757)

  • Update io tests to work with changed annotation parser
    (0f00d67)

  • Update test for better annotation parsing
    (01ba041)

v0.1.0 (2025-02-25)

Bug Fixes

  • Adhere to proper rotation standards
    (ffbc370)

  • Change name to match github action
    (0fc916a)

  • Correct color type import
    (0ea0ba1)

  • Data ownership for secondary structure
    (6bdf6f5)

  • Database tests
    (a964c42)

  • Fix helix visualization
    (b0e7661)

  • Foldseek test
    (c842464)

  • Helix and sheet working again
    (0e62f78)

  • Improve rotation
    (e48447e)

  • Parameter passing
    (66f4232)

  • Projection works correctly now
    (783e00e)

  • Projector separated out
    (1a6c884)

  • Refactor coordinate transformation and test
    (09079fa)

  • Render pipeline
    (c3a079c)

  • Resolve element import issue
    (cd2868e)

  • Rotation algorithm now follows proper axis alignment
    (c579231)

  • Update projector to properly work
    (1779e0d)

  • Update tests and fix problems with implementations
    (5f5a36c)

  • Utils test
    (bf349e5)

Chores

Code Style

  • Add non-element drawing
    (f452567)

  • Add rounded linecaps
    (2881a6e)

  • Make helix connect in the center
    (1543288)

Continuous Integration

  • Add pre commit hooks
    (b1b4a0b)

  • Add pytest to pull requests
    (3718495)

  • Add releaserc to fix semantic release
    (abbc2a5)

  • Fix installation issues psr
    (39ba9d3)

  • Update commit parser
    (1ed7142)

  • Update semantic release
    (8fc028a)

Documentation

  • Add GitHub templates
    (f684626)

  • Allow blank issues during pre-release
    (40825d4)

  • Switch to mkdocs for easier maintenance and editing
    (db3235b)

Features

Refactoring

  • Adapt example to new scene composition
    (cafbdc1)

  • Add base elements
    (6495a0e)

  • Add basic circle annotation
    (af7ba84)

  • Add combined rotation
    (5081205)

  • Add core entities
    (e516fd0)

  • Add core exports
    (b1c32ca)

  • Add core module exports
    (5f69c98)

  • Add h5py
    (2c9a640)

  • Add index resolution
    (da02ef1)

  • Add pdb parsing from biopython
    (26d51f0)

  • Add separate projection abstraction
    (09dc118)

  • Add sorting by z-coordinate
    (2ad666d)

  • Add structure for visualization layer
    (8681035)

  • Add svg rendering
    (493c39a)

  • Change chain to subclass of structure_component
    (7545d49)

  • Change display coordinate name to be more fitting
    (a4f06fc)

  • Change name for more clarity
    (5c83e21)

  • Change theme
    (edf76d4)

  • Change to python 3.12 to be compatible with biopython
    (44a45c0)

  • Change transformer name
    (7290bff)

  • Cleanup dependencies
    (6fc9b55)

  • Coordinate responsibility stays in the manager
    (b590c55)

  • Create core structure model
    (a739409)

  • Export StructureComponent
    (9de5a18)

  • Fix coil working
    (f1466e2)

  • Fix drawing
    (862543b)

  • Fix import
    (2434f86)

  • Fix issues and extend tests
    (3fb9119)

  • Helix path zig-zag pattern
    (487fc55)

  • Improve .cif parsing to handle secondary structure
    (7dcf4c0)

  • Improve naming
    (375578d)

  • Improve scaling
    (6af118c)

  • Improve styling
    (3ab662a)

  • Improve styling
    (960006e)

  • Improved example visualization
    (3f9e801)

  • Integrate style for annotation drawing
    (227b0b2)

  • Keep residue information
    (f0691da)

  • Make annotation work generally
    (0b8e9e2)

  • Move coordinate view into secondary structure
    (58a2d28)

  • Move old code to subfolder
    (8c6aa03)

  • Project structure and update dependencies
    (42b0b6e)

  • Expanded .gitignore to include additional Python and IDE files. - Added .python-version file to
    specify Python version 3.13. - Updated pyproject.toml to reflect new project version 0.1.0 and
    modified dependencies. - Removed requirements.txt as dependencies are now managed via
    pyproject.toml. - Introduced new FlatProt.code-workspace for VSCode settings. - Added new data
    files for SF_database and flexUSER_database. - Deleted old distribution files and documentation
    artifacts. - Created initial structure for the FlatProt package with main functionalities and
    utilities

Note docker is broken and needs fixing.

  • Pydantic classes for style management
    (97fff74)

  • Remove biopython
    (9a748ec)

  • Remove code duplication for transformation
    (2a9d802)

  • Remove debug output
    (07ac5a1)

  • Remove debug output
    (abe1285)

  • Remove explicit structure from projection
    (0833ed2)

  • Remove obsolete data
    (5259ce3)

  • Remove old code
    (485c03d)

  • Remove state from visualization
    (0857ed9)

  • Remove unnecessary types
    (fcbb233)

  • Rename ProjectionMatrix to TransformationMatrix
    (a5ced0b)

  • Restructure scene for better element management
    (eaa2be0)

Scene manages elements in a flat and treelike structure to allow coordinate mapping and tree
construction.

  • Secondary structure owns all data as view
    (d9abbdb)

  • Separate coordinates from drawing with scene object
    (eed0012)

  • Separate style from scene
    (2596feb)

  • Sheet visualization close to original
    (a3e18b7)

  • Simplify protein IO
    (8bb6b55)

  • Simplify smoothing algorithm
    (87f9ca5)

  • Structure to core
    (af371db)