SMACT
Python package to aid materials design and informatics
Install / Use
/learn @WMD-group/SMACTREADME
SMACT
Semiconducting Materials from Analogy and Chemical Theory (SMACT) is a collection of rapid screening and informatics tools that uses data about chemical elements.
- Documentation: https://smact.readthedocs.io/en/latest/
- Examples: https://smact.readthedocs.io/en/latest/examples.html

If you torture the data enough, nature will always confess - Roland Coase (from 'How should economists choose?')
Statement of need
There is a strong demand for functional materials across a wide range of technologies. The motivation can include cost reduction, performance enhancement, or to enable a new application. We have developed low-cost procedures for screening hypothetical materials. This framework can be used for simple calculations on your own computer. SMACT follows a top-down approach where a set of element combinations is generated and then screened using rapid chemical filters. It can be used as part of a multi-technique workflow or to feed artificial intelligence models for materials.

Getting started
Features are accessed through Python scripts, importing classes and functions as needed. The best place to start is looking at the docs, which highlight some simple examples of how these classes and functions can be used. Use cases are available in our examples and tutorials folders.
Code features
-
At the core of SMACT are Element and Species (element in a given oxidation state) classes that have various properties associated with them.
-
Oxidation states that are accessible to each element are included in their properties.
-
Element compositions can be screened through based on the heuristic filters of charge neutrality and electronegativity order. This is handled using the screening module and this publication describes the underlying theory. An example procedure is outlined in the docs.
-
Further filters can be applied to generated lists of compositions in order to screen for particular properties. These properties are either intrinsic properties of elements or are calculated for compositions using the properties module. For example:
- An application is shown in this publication, in which 160,000 chemical compositions are screened based on optical band gap calculated using the solid-state energy scale.
- The oxidation_states module can be used to filter out compositions containing metals in unlikely oxidation states according to a data-driven model.
-
Compositions can also be filtered based on sustainability via the abundance of elements in the Earth's crust or via the HHI scale.
-
Compositions can be converted for use in Pymatgen or for representation to machine learning algorithms (see this example) and the related ElementEmbeddings package.
-
The code also has tools for manipulating common crystal lattice types:
- Certain structure types can be built using the builder module
- Lattice parameters can be estimated using ionic radii of the elements for various common crystal structure types using the lattice_parameters module.
- The lattice module and distorter module rely on the Atomic Simulation Environment and can be used to generate unique atomic substitutions on a given crystal structure.
- The structure prediction module can be used to predict the structure of hypothetical compositions using species similarity measures.
- The dopant prediction module can be used to facilitate high-throughput predictions of p-type and n-type dopants of multicomponent solids.
List of modules
- smact library containing:
- __init__.py Contains the core
ElementandSpeciesclasses. - data_loader.py Handles the loading of external data used to initialise the core
smact.Elementandsmact.Speciesclasses. - screening.py Used for generating and applying filters to compositional search spaces.
- properties.py A collection of tools for estimating useful properties based on composition.
- lattice.py Given the sites, multiplicities and possible oxidation states at those sites, this reads from the database and generates all possible stoichiometries.
- builder.py Builds some common lattice structures, given the chemical composition.
- lattice_parameters.py Estimation of lattice parameters for various lattice types using covalent/ionic radii.
- distorter.py A collection of functions for enumerating and then substituting on inequivalent sites of a sub-lattice.
- oxidation_states.py: Used for predicting the likelihood of species coexisting in a compound based on a statistical model.
- structure_prediction: A submodule which contains a collection of tools for facilitating crystal structure predictions via ionic substitutions
- dopant_prediction: A submodule which contains a collections of tools for predicting dopants.
- utils.py A collection of utility functions used throughout the codebase.
- __init__.py Contains the core
Requirements
The main language is Python 3 and has been tested using Python 3.11 - 3.13.
Core dependencies include NumPy, SciPy, pandas, pymatgen, ASE, and spglib. A full list is in pyproject.toml.
Installation
The latest stable release can be installed via pip:
pip install smact
Optional dependencies (needed for full replication of examples and tutorials):
pip install "smact[optional]"
SMACT is also available via conda-forge:
conda install -c conda-forge smact
Developer installation
We use uv for dependency management. To set up a development environment:
git clone https://github.com/wmd-group/smact.git
cd smact
uv sync --extra optional --extra property_prediction --dev
pre-commit install
This installs SMACT in editable mode with all optional and development dependencies, and sets up pre-commit hooks. See CONTRIBUTING.md for the full workflow.
License and attribution
Python code and original data tables are licensed under the MIT License.
Development notes
Bugs, features and questions
Please use the Issue Tracker to report bugs or request features in the first instance. While we hope that most questions can be answered by searching the docs, we welcome new questions on the issue tracker, especia
Related Skills
claude-opus-4-5-migration
81.9kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
model-usage
332.9kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
diffs
332.9kUse the diffs tool to produce real, shareable diffs (viewer URL, file artifact, or both) instead of manual edit summaries.
TrendRadar
49.7k⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。
