Hansen Solubility Parameters in Python
Project description
HSPiPy
Hansen Solubility Parameters in Python.
Introduction
HSPiPy is a Python library designed for calculating and visualizing Hansen Solubility Parameters (HSP). It provides machine-learning–friendly estimators, convenient data import, and plotting tools for analyzing solvent compatibility in materials science, polymers, and coatings.
Features
- Read solvent data from multiple formats (CSV, HSD, HSDX)
- Calculate Hansen Solubility Parameters using robust optimization methods
- Support for single or multiple (up to 2) solubility spheres
- Generate 2D and 3D visualizations of solubility spheres
- Fully compatible with scikit-learn for machine learning workflows
Documentation
- Class reference:
Installation
Install HSPiPy easily with pip:
pip install HSPiPy
Dependencies
- numpy
- pandas
- matplotlib
- scipy
- scikit-learn
Usage
Reading HSP Data
To read HSP data from a file (CSV, HSD or HSDX), create an instance of the HSP class and use the read method:
from hspipy import HSP
hsp = HSP()
hsp.read('path_to_your_hsp_file.csv')
Calculating HSP
Use the get method to calculate the Hansen Solubility Parameters (HSP) from your data:
# For a single sphere model (default)
result = hsp.get(inside_limit=1)
# For a double sphere model
result = hsp.get(inside_limit=1, n_spheres=2)
get() returns an HSPResult object. In a Jupyter notebook it renders as a formatted table automatically. In a script use print(result) or access attributes directly:
print(result.hsp) # fitted D, P, H center coordinates
print(result.radius) # sphere radius
print(result.accuracy) # classification accuracy
print(result.datafit) # DATAFIT value
print(result.n_solvents_in) # number of good solvents
print(result.n_solvents_out) # number of bad solvents
print(result.n_total) # total solvents
print(result.n_wrong_in) # bad solvents inside sphere (false positives)
print(result.n_wrong_out) # good solvents outside sphere (false negatives)
The inside_limit parameter defines the threshold score value to consider a solvent as "inside" the solubility sphere (default: inside_limit=1).
Visualizing HSP
Use the plot_3d and plot_2d methods to visualize the HSP data in 3D and 2D formats, respectively:
# Generate individual plots
hsp.plot_3d()
hsp.plot_2d()
# Or generate both plots at once
hsp.plots()
HSP class methods:
| Method | Description |
|---|---|
| read(path) | Reads solvent data from a CSV, HSD, or HSDX file. |
| get(inside_limit=1, n_spheres=1) | Fits HSP sphere(s) and returns an HSPResult object. |
| plot_3d() | Plots the HSP data in 3D. Returns the figure. |
| plot_2d() | Plots the HSP data in 2D. Returns the figure. |
| plots() | Generates both 2D and 3D plots. Returns (fig_3d, fig_2d). |
get() returns an HSPResult object. The following attributes are available on it and also set on the HSP instance after calling get():
| Attribute | Description |
|---|---|
result.hsp |
Numpy array — Fitted HSP coordinates. Shape: (3,) for single-sphere (D, P, H), or (n_spheres, 3) for multiple spheres. |
result.radius |
Float or array — Radius (or radii) of the solubility sphere(s). |
result.error |
Float — Objective function value from the optimization (lower is better). |
result.accuracy |
Float — Classification accuracy of the fitted model on the dataset. |
result.datafit |
Float — DATAFIT value (geometric mean fitness; 1.0 = perfect classification). |
result.n_solvents_in |
Int — Number of good solvents (0 < score <= inside_limit). |
result.n_solvents_out |
Int — Number of bad solvents (score == 0 or score > inside_limit). |
result.n_total |
Int — Total number of solvents. |
result.n_wrong_in |
Int — Bad solvents predicted inside the sphere (false positives). |
result.n_wrong_out |
Int — Good solvents predicted outside the sphere (false negatives). |
hsp.d, hsp.p, hsp.h |
Float — Individual HSP components (δD, δP, δH). Single-sphere only; None for multi-sphere. |
hsp.inside |
List — Solvents classified as inside the solubility sphere(s), with their HSP values and scores. |
hsp.outside |
List — Solvents classified as outside the solubility sphere(s), with their HSP values and scores. |
hsp.grid |
Pandas DataFrame — The full input dataset, standardized with columns: Solvent, D, P, H, and Score. |
Using scikit-learn style estimator
import numpy as np
from hspipy import HSPEstimator
# Example dataset (D, P, H values with scores)
X = np.array([
[16.0, 8.0, 5.0],
[18.0, 7.5, 9.0],
[20.0, 10.0, 12.0],
])
y = np.array([1, 1, 0]) # Inside/outside labels or scores
est = HSPEstimator(n_spheres=1)
est.fit(X, y)
print("Fitted HSP:", est.hsp_)
print("Accuracy:", est.score(X, y))
Contributing
Contributions are welcome! If you have any suggestions, feature requests, or bug reports, please open an issue on the GitHub repository.
License
This library is licensed under the MIT License. See the LICENSE file for details.
Acknowledgements
HSPiPy was inspired by the well-known HSP software suit Hansen Solubility Parameters in Practice (HSPiP) and by the HSP community.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hspipy-1.1.8.tar.gz.
File metadata
- Download URL: hspipy-1.1.8.tar.gz
- Upload date:
- Size: 41.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4c23e8c45a3a51550ef3b19196209d445cce893176c8d30819ca99a5e6f8d8c
|
|
| MD5 |
6db7313339aaef0c3d1bd9ea0a9e6481
|
|
| BLAKE2b-256 |
e31bf604a6e696b60dc082801e2e0d119bbd3d2d8846840564bad85378d4e830
|
File details
Details for the file hspipy-1.1.8-py3-none-any.whl.
File metadata
- Download URL: hspipy-1.1.8-py3-none-any.whl
- Upload date:
- Size: 43.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d916f2d6680a44491c55909efa0694b5d96c5a6dbe20c3fbd89524e9915f0f87
|
|
| MD5 |
a908e9cb3041047e00ef4dff1dd5d10a
|
|
| BLAKE2b-256 |
4468edcad6a549ac9c1b8bff9180edc2ff79c67a497c61d628c544963e0c2e71
|