Datamol is a python library to work with molecules.

Overview

Molecular Manipulation Made Easy


Binder PyPI Conda PyPI - Downloads Conda PyPI - Python Version license GitHub Repo stars GitHub Repo stars

Datamol is a python library to work with molecules. It's a layer built on top of RDKit and aims to be as light as possible.

  • 🐍 Simple pythonic API
  • ⚗️ RDKit first: all you manipulate are rdkit.Chem.Mol objects.
  • Manipulating molecules often rely on many options; Datamol provides good defaults by design.
  • 🧠 Performance matters: built-in efficient parallelization when possible with optional progress bar.
  • 🕹️ Modern IO: out-of-the-box support for remote paths using fsspec to read and write multiple formats (sdf, xlsx, csv, etc).

Try Online

Visit Binder and try Datamol online.

Documentation

Visit https://doc.datamol.io.

Installation

Use conda:

mamba install -c conda-forge datamol

Quick API Tour

import datamol as dm

# Common functions
mol = dm.to_mol("O=C(C)Oc1ccccc1C(=O)O", sanitize=True)
fp = dm.to_fp(mol)
selfies = dm.to_selfies(mol)
inchi = dm.to_inchi(mol)

# Standardize and sanitize
mol = dm.to_mol("O=C(C)Oc1ccccc1C(=O)O")
mol = dm.fix_mol(mol)
mol = dm.sanitize_mol(mol)
mol = dm.standardize_mol(mol)

# Dataframe manipulation
df = dm.data.freesolv()
mols = dm.from_df(df)

# 2D viz
legends = [dm.to_smiles(mol) for mol in mols[:10]]
dm.viz.to_image(mols[:10], legends=legends)

# Generate conformers
smiles = "O=C(C)Oc1ccccc1C(=O)O"
mol = dm.to_mol(smiles)
mol_with_conformers = dm.conformers.generate(mol)

# 3D viz (using nglview)
dm.viz.conformers(mol, n_confs=10)

# Compute SASA from conformers
sasa = dm.conformers.sasa(mol_with_conformers)

# Easy IO
mols = dm.read_sdf("s3://my-awesome-data-lake/smiles.sdf", as_df=False)
dm.to_sdf(mols, "gs://data-bucket/smiles.sdf")

Compatibilities

Version compatibilities are an essential topic for production-software stacks. We are cautious about documenting compatibility between datamol, python and rdkit.

datamol python rdkit
0.3 >=3.7,<=3.9 >=2020.09,<=2021.03

CI Status

master
Lib build & Testing GitHub Workflow Status
Code Sanity (linting and type analysis) GitHub Workflow Status
Documentation Build GitHub Workflow Status

Changelogs

See the latest changelogs at CHANGELOG.rst.

License

Under the Apache-2.0 license. See LICENSE.

Authors

See AUTHORS.rst.

Comments
  • change force field to MMFF94s without electorstatic component

    change force field to MMFF94s without electorstatic component

    Proposed change to conformer force field from UFF to MMFF94s_noEstat, inspired by Openeye's Omega force field. In addition to FF change, added filters (ewindow, eratio), to allow high-energy conformers to be filtered out.

    opened by matudor 16
  • [ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'sascorer' Traceback (most recent call last):

    [ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'sascorer' Traceback (most recent call last):

    [ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'sascorer' Traceback (most recent call last):
    

    Posting so it's logged somewhere.

    Is this a new dependency for datamol? Disclaimer, I didn't update datamol in my project (lambdomics) since a couple months (I was at 0.5 before upgrading). sascorer seems to have appear in commit 8576d4b with the descriptors module, and this module is imported by default when using import datamol as dm .

    sascorer seems to be a module coming from RDKit but I'm not sure. Is it just a matter of making sure to import RDKit before datamol if you use both in your project?

    bug question 
    opened by MichelML 14
  • Added graph matching and template re-ordering

    Added graph matching and template re-ordering

    Is this relevant to datamol? If so, I'll improve the PR and make some tests.

    Functions to re-order a molecule from a template ordering, and to match molecules with different orderings.

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (if appropriate).
    • [x] Update the API documentation is a new function is added or an existing one is deleted.
    • [x] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    opened by DomInvivo 8
  • better sanitize handling in read_sdf

    better sanitize handling in read_sdf

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (if appropriate).
    • [x] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    Calling dm.sanitize_mol delete the conformers which should not happens by default since you often want the 3d structure when you read an SDF file.

    (bug spotted while running unit tests on berth with a recent version of datamol)

    opened by hadim 7
  • Mc edits

    Mc edits

    Made small changes to tutorials and documentation Checklist:

    • [x] Removed repeated lines in docs/tutorials/The_Basics.ipynb
    • [x] Removed comments around a couple lines in docs/tutorials/Preprocessing_Molecules.ipynb

    Other questions

    • [x] Fragment and scaffold tutorial does not seem to load correctly. Is it still a wip?
    • [x] In the API section, datamol.actions contains this .. warning:: This is computationally expensive. Should the formatting around 'warning' be changed?
    • [x] Same idea as above in datamol.fragments, but with ..note ::

    opened by craigmichaelm 7
  • `dm.read_smi()` copies a file to an already existing location

    `dm.read_smi()` copies a file to an already existing location

    When I try to load a remote .smi file using Datamol, I run into the following exception:

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    (...)
    
    File ~/mambaforge/envs/mood/lib/python3.10/site-packages/datamol/io.py:320, in read_smi(urlpath)
        318 if not fsspec.utils.can_be_local(str(urlpath)):
        319     active_path = pathlib.Path(tempfile.mkstemp()[1])
    --> 320     dm.utils.fs.copy_file(urlpath, active_path)
        322 # Read the molecules
        323 supplier = rdmolfiles.SmilesMolSupplier(str(active_path), titleLine=0)
    
    File ~/mambaforge/envs/mood/lib/python3.10/site-packages/datamol/utils/fs.py:250, in copy_file(source, destination, chunk_size, force, progress, leave_progress)
        247     raise ValueError(f"The file being copied does not exist or is not a file: {source}")
        249 if not force and is_file(destination_file):  # type: ignore
    --> 250     raise ValueError(f"The destination file to copy already exists: {destination}")
        252 with source_file as source_stream:
        253     with destination_file as destination_stream:
    
    ValueError: The destination file to copy already exists: /tmp/tmpkzrm7u58
    

    Seems like this function is not up-to-date with recent changes in the dm.utils.fs module? Seems to me like active_path should be set differently to a non-existing file.

    bug 
    opened by cwognum 6
  • New align + news descriptors + some cleaning

    New align + news descriptors + some cleaning

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (if appropriate).
    • [ ] Update the API documentation is a new function is added or an existing one is deleted.
    • [x] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    I still need to add the new align code.

    opened by hadim 6
  • expose clean_it arg

    expose clean_it arg

    Exposing this arg can prevent errors for certain problematic molecules when enumerating stereochemistry.

    E.g.

    sm = "N=1C(NC2CC2)=C3C(=NC1)N(/C=C/C=4C=C(C=CC4C)C(=O)NC=5C=C(C=C(C5)N6CCN(CC6)C)C(F)(F)F)C=N3"
    mol = datamol.to_mol(sm)
    
    datamol.enumerate_stereoisomers(mol) # Fails
    datamol.enumerate_stereoisomers(mol, clean_it=False) # Succeeds
    
    opened by jdhorwood 6
  • Use native batch_size from joblib

    Use native batch_size from joblib

    Fix #58 by replacing Sequence by Iterable.

    I had the same bug a few hours ago. @DomInvivo

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (if appropriate).
    • [ ] Update the API documentation is a new function is added or an existing one is deleted.
    • [x] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    opened by maclandrol 6
  • add sanitize arg in read_sdf

    add sanitize arg in read_sdf

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (not needed).
    • [ ] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    opened by Ishan-Kumar2 6
  • More options for matching with ambiguity

    More options for matching with ambiguity

    Added more options for allow_ambiguous_match, passed as strings. Notably, option "best" allows to find the match with the least amount of errors in terms of atomic number, bond type, and bond stereo.

    Checklist:

    • [x] Add tests to cover the fixed bug(s) or the new introduced feature(s) (if appropriate).
    • [x] Update the API documentation is a new function is added or an existing one is deleted.
    • [x] Added a news entry.
      • copy news/TEMPLATE.rst to news/my-feature-or-branch.rst) and edit it.

    opened by DomInvivo 5
  • Move the fs module to its dedicated section in the docs

    Move the fs module to its dedicated section in the docs

    This is a very useful module, making it under the utils section undermines its visibility imho.

    fsspec ftw

    ref: https://doc.datamol.io/stable/api/datamol.utils.html#datamol.utils.fs

    documentation 
    opened by MichelML 1
  • Add dm.read_records in io module

    Add dm.read_records in io module

    This would simplify things when working in the context of querying a rest api where the json response contains a list of molecules. Quick REST API examples:

    • Molport
    • Chemspace
    • Mcule
    • CDD Vault
    • Dotmatics
    • PubChem
    • Etc...
    enhancement low-priority 
    opened by MichelML 7
  • rdkit.Chem.GetSubstructMatch called in dm.scaffold.fuzzy_scaffolding takes rdkit mol as input, not str

    rdkit.Chem.GetSubstructMatch called in dm.scaffold.fuzzy_scaffolding takes rdkit mol as input, not str

    According to the datamol documentation and code, the enforce_subs parameter of dm.scaffold.fuzzy_scaffolding should be a list of str (presumably SMILES or SMARTS). However, passing in a list of str gives the following rdkit argument error:

    image

    This is because the dm.scaffold.fuzyy_scaffolding function passes the enfocre_subs parameter to rdkit.Chem.GetSubstructMatch, which should take as input an rdkit molecule object, not a string.

    ~~Additionally, upon loading the pattern SMILES as molecule object and passing that into the enforce_subs parameter, the function runs without error but dm.scaffold.fuzyy_scaffolding will miss the loaded pattern:~~

    Edit: Image removed. This was a bad example I falsely thought wasn't capturing an enforce_subs r-group. Will find a better example.

    bug documentation 
    opened by colinrsmall 3
  • `dm.align.template_align` modify the global rdkit behaviour

    `dm.align.template_align` modify the global rdkit behaviour

    See https://github.com/datamol-org/datamol/blob/013d93012abb7fb309a382d8b3eedaca4c2f4425/datamol/align.py#L107

    We should not modify the global behaviour. The best is probably to put back the original value if it has been modified. This is not ideal in when doing multithreading.

    bug low-priority 
    opened by hadim 2
  • Refactor `dm.scaffold.fuzzy_scaffolding`

    Refactor `dm.scaffold.fuzzy_scaffolding`

    dm.scaffold.fuzzy_scaffolding is quite a powerful function but its output is often hard to understand and also process for downstream task.

    We could keep backward compat by keeping dm.scaffold.fuzzy_scaffolding and propose an alternative function that will do the same kind of processing under the hood but return a data structure that is more intuitive and easier to use (a dataframe or a list of dataframe?).

    enhancement low-priority 
    opened by hadim 0
Releases(0.8.8)
  • 0.8.8(Dec 15, 2022)

  • 0.8.7(Nov 29, 2022)

    Added:

    • Add multiple utilities to work with mapped SMILES with hydrogens.
    • Add dm.clear_atom_props() to remove atom's properties.
    • Add dm.clear_atom_map_number() to remove the atom map number property.
    • Add dm.get_atom_positions() to retrieve the atomic positions of a conformer of a molecule.
    • Add dm.set_atom_positions() to add a new confomer to a molecule given a list of atomic positions.

    Changed:

    • Add new arguments to dm.to_mol: allow_cxsmiles, parse_name, remove_hs and strict_cxsmiles. Refers to the docstring for the details.
    • Set copy to True by default to dm.atom_indices_to_mol().
    • Allow to specify the property keys to clear in dm.clear_mol_props(). If not set, the original default beahviour is to clear everything.

    Authors:

    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.8.7.tar.gz(3.42 MB)
  • 0.8.6(Nov 28, 2022)

  • 0.8.5(Nov 28, 2022)

    Added:

    • Support for max_num_mols in dm.read_sdf(). Useful when files are large and debugging code.
    • Support for returning the invalid molecules in dm.read_sdf. Useful when we need to know which one failed.
    • Support for more compression formats when reading SDF files using fssep.open(..., compression="infer").
    • Add CODEOWNERS file.
    • Add dm.descriptors.n_spiro_atoms and dm.descriptors.n_stereo_centers_unspecified.

    Changed:

    • Overload output types for dm.read_sdf and dm.data.*.
    • Reduce tests duration (especially in CI).

    Authors:

    • DomInvivo
    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.8.5.tar.gz(3.42 MB)
  • 0.8.4(Nov 11, 2022)

  • 0.8.3(Nov 5, 2022)

  • 0.8.2(Oct 31, 2022)

  • 0.8.1(Oct 28, 2022)

  • 0.8.0(Oct 28, 2022)

    Added:

    • dm.Atom and dm.Bond types.
    • Add RDKit as a pypi dep.
    • Add datamol.hash_mol() based on rdkit.Chem.RegistrationHash.

    Changed:

    • RDKit 2022.09: use Draw.shouldKekulize instead of Draw._okToKekulizeMol.
    • RDKit 2022.09: don't use dm.convert._ChangeMoleculeRendering for RDKit >=2022.09.

    Authors:

    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.8.0.tar.gz(3.42 MB)
  • 0.7.18(Oct 18, 2022)

  • 0.7.17(Oct 14, 2022)

  • 0.7.16(Oct 12, 2022)

    Changed:

    • Bump upstream GH actions versions.
    • dm.fs.copy_dir now uses the internal fsspec copy when the two source and destination fs are the same. It makes the copy much faster.

    Fixed:

    • Use os.PathLike to recognize a broader range of string-based path inputs in the dm.fs module. It prevents file objects such as py._path.local.LocalPath not being recognized as path.

    Authors:

    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.16.tar.gz(3.36 MB)
  • 0.7.15(Oct 11, 2022)

  • 0.7.14(Oct 3, 2022)

    Added:

    • Add with_atom_indices to dm.to_smiles. If enable, atom indices will be added to the SMILES.

    Changed:

    • Changed the default for dm.fs.is_file() from True`` toFalse`.
    • Refactor the API doc to breakdown all the submodules in individual doc. Thanks to @MichelML for the suggestion.
    • Re-enable pipy activity in rever.

    Fixed:

    • Minor typo in the documentation of dm.conformers.generate()

    Authors:

    • Cas
    • Hadrien Mary
    • Valence-JonnyHsu
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.14.tar.gz(3.36 MB)
  • 0.7.13(Sep 9, 2022)

  • 0.7.12(Sep 6, 2022)

  • 0.7.11(Sep 4, 2022)

    Added:

    • Add configurations for dev containers based on the micromamba Docker image. More informations about dev container at https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers.
    • support for two additional forcefields: MMFF94s with and without electrostatic component
    • energies output along with delta-energy to lowest energy conformer

    Changed:

    • API of dm.conformers.generate() to support choice of forcefield. In addition ewindow and eratio flags added to reject high energy conformers, either on absoute scale, or as ratio to rotatable bonds
    • Revamped all the datamol tutorials and add new tutorials. Huge thanks to @Valence-jonnyhsu for leading the refactoring of the datamol tutorials.
    • Improve documentation for dm.standardize_mol()
    • Multiple various docstring and typing improvments.
    • Embed the cdk2.sdf and solubility_*.sdf files within the datamol package to prevent issue with the RDKit config dir.
    • Enable strict mode on the documentation to prevent any issues and inconsistency with the types and docstrings of datamol.
    • Refactor micromamba CI to use latest and simplify it.

    Removed:

    • Remove unused and unmaintained dm.actions and dm.reactions module.
    • Remove copy args from add_hs and remove_hs (RDKit already returns copies).

    Fixed:

    • Errors in ECFP fingerprints that computes FCFP instead of ECFP.

    Authors:

    • Emmanuel Noutahi
    • Hadrien Mary
    • Matt
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.11.tar.gz(2.95 MB)
  • 0.7.10(Jul 18, 2022)

    Added:

    • New possibilities for ambiguous matching of molecules in the function reorder_mol_from_template

    Changed:

    • Replaced allow_ambiguous_hs_only by the option "hs_only" for the ambiguous_match_mode parameter
    • ambiguous_match_mode is now a String, no longer a bool.

    Deprecated:

    • allow_ambiguous_hs_only is no longer deprecated, but without warning since the feature is brand new.
    • Same for ambiguous_match_mode being a bool.

    Authors:

    • DomInvivo
    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.10.tar.gz(1.03 MB)
  • 0.7.9(Jun 17, 2022)

    Added:

    • datamol.graph.match_molecular_graphs, with unit-tests
    • datamol.graph.reorder_mol_from_template, with unit-tests

    Changed:

    • Typing in datamol.graph.py, changed rdkit.Chem.rdchem.Mol to dm.Mol

    Deprecated:

    • NOTHING

    Removed:

    • NOTHING

    Fixed:

    • NOTHING

    Security:

    • NOTHING

    Authors:

    • DomInvivo
    • Emmanuel Noutahi
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.9.tar.gz(1.03 MB)
  • 0.7.8(Jun 3, 2022)

  • 0.7.7(May 30, 2022)

  • 0.7.6(May 20, 2022)

  • 0.7.5(May 19, 2022)

  • 0.7.4(May 13, 2022)

  • 0.7.3(Apr 12, 2022)

  • 0.7.2(Mar 22, 2022)

  • 0.7.1(Mar 18, 2022)

    Added:

    • A new dm.align module with various functions to align a list of molecules. Use dm.align.template_align to align a molecule to a template and dm.align.auto_align_many to automatically partition and align a list of molecules.
    • New descriptors: formal_charge
    • New descriptors: refractivity
    • New descriptors: n_rigid_bonds
    • New descriptors: n_stereo_centers
    • New descriptors: n_charged_atoms
    • Add dm.clear_props to clear all the properties of a mol.
    • Add a new dataset in addition to freesolv based on RDKit CDK2 at dm.cdk2().
    • Add dm.strip_mol_to_core to remove all R groups from a molecule.
    • Add dm.UNSPECIFIED_BOND
    • dm.compute_ring_system to extract the ring systems from a molecule.

    Changed:

    • Improve typing.
    • Improve relative imports coverage.
    • Adapt dm.to_image to use the align module.

    Removed:

    • Remove a lot of # type: ignore as those can be error prone (hopefully the tests are here!)

    Authors:

    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.1.tar.gz(1.03 MB)
  • 0.7.0(Mar 11, 2022)

    Added:

    • Add dm.conformers.keep_conformers in order to only keep one or multiple conformers from a molecules.

    Changed:

    • Change the conformer generation arguments to use useRandomCoords=True by default.
    • Start using explicit Optional instead of implicit Optional for typing.
    • Start using relative imports instead of absolute ones.
    • When conformers are not minimized, sort them by energy (can be turned to False).

    Removed:

    • Remove fallback_to_random_coords argument from generate_conformers.

    Authors:

    • Hadrien Mary
    Source code(tar.gz)
    Source code(zip)
    datamol-0.7.0.tar.gz(1.02 MB)
  • 0.6.9(Mar 2, 2022)

    Added:

    • Support for selfies<2.0.0 in tests

    Changed:

    • Behaviour of all inchi functions to return None with a warning instead of silently returning an empty string
    • Order of str evaluation on convertion function. isinstance(str) is now evaluated before is None

    Fixed:

    • Bug in unique_id making this evaluation falling back on 'd41d8cd98f00b204e9800998ecf8427e' on unsupported inputs. Instead None is returned now

    Authors:

    • Emmanuel Noutahi
    Source code(tar.gz)
    Source code(zip)
    datamol-0.6.9.tar.gz(1.02 MB)
  • 0.6.8(Feb 27, 2022)

Owner
datamol
A python library to work with molecules.
datamol
Make after-work Mending More flexible In Python

Mending Make after-work Mending More flexible In Python A Lite Package focuses on making project's after-post mending pythonic and flexible. Certainly

null 2 Jun 15, 2022
A Python Perforce package that doesn't bring in any other packages to work.

P4CMD ?? A Python Perforce package that doesn't bring in any other packages to work. Relies on p4cli installed on the system. p4cmd The p4cmd module h

Niels Vaes 13 Dec 19, 2022
A Python 3 client for the beanstalkd work queue

Greenstalk Greenstalk is a small and unopinionated Python client library for communicating with the beanstalkd work queue. The API provided mostly map

Justin Mayhew 67 Dec 8, 2022
A project to work with databases in 4 worksheets, insert, update, select, delete using Python and MySqI

A project to work with databases in 4 worksheets, insert, update, select, delete using Python and MySqI As a small project for school or college hope it is useful

Sina Org 1 Jan 11, 2022
This is an implementation of NeuronJ work with python.

NeuronJ This is an implementation of NeuronJ work with python. NeuronJ is a plug-in for ImageJ that allows you to create and edit neurons masks. Image

Mohammad Mahdi Samei 3 Aug 28, 2022
Your copilot to studies and work (Pomodoro-timer, Translate and Notes app)

Copylot Your copilot to studies and work (Pomodoro-timer, Translate and Notes app) Copylot are three applications in one: Pomodoro Translate Notes Cop

Eduardo Mendes 20 Dec 16, 2022
A step-by-step tutorial for how to work with some of the most basic features of Nav2 using a Jupyter Notebook in a warehouse environment to create a basic application.

This project has a step-by-step tutorial for how to work with some of the most basic features of Nav2 using a Jupyter Notebook in a warehouse environment to create a basic application.

Steve Macenski 49 Dec 22, 2022
A Puzzle A Day Keep the Work Away

A Puzzle A Day Keep the Work Away No moyu again!

P4SSER8Y 5 Feb 12, 2022
✔️ Create to-do lists to easily manage your ideas and work.

Todo List + Add task + Remove task + List completed task + List not completed task + Set clock task time + View task statistics by date Changelog v 1.

Abbas Ataei 30 Nov 28, 2022
Comics/doujinshi reader application. Web-based, will work on desktop and tablet devices with swipe interface.

Yomiko Comics/doujinshi reader application. Web-based, will work on desktop and tablet devices with swipe interface. Scans one or more directories of

Kyubi Systems 26 Aug 10, 2022
Research on how Gboard Stickers work.

Google-Sticker-Mashup-Research Research on how Gboard Stickers work. Contribute Contributing is nice, and you will be listed below for contributing. C

Jeremiah 45 Oct 28, 2022
Blender Light Manipulation - A script that makes it easier to work with light

Blender Light Manipulation A script that makes it easier to work with light 1. Wstęp W poniższej dokumentacji przedstawiony zostanie skrypt, który swo

Tomasz 1 Oct 19, 2021
Script to work around some quirks of the blender obj importer

ObjFix 1.0 (WIP) Script to work around some quirks of the blender obj importer Installation Download this repo In Blender, press "Edit" on the top-bar

Red_3D 4 Nov 20, 2021
This is a small compiler to demonstrate how compilers work.

This is a small compiler to demonstrate how compilers work. It compiles our own dialect to C, while being written in Python.

Md. Tonoy Akando 2 Jul 19, 2022
An attempt at furthering Factorio Calculator to work in more general contexts.

factorio-optimizer Lets do Factorio Calculator but make it optimize. Why not use Factorio Calculator? Becuase factorio calculator is not general. The

Jonathan Woollett-Light 1 Jun 3, 2022
A rough GSL work DynSAGE of my graduation project

DynSAGE Codes w.r.t DynSAGE-Diffuse can be found in function apply_dyn_model_v2 of src/utils.py. The training entrance is Line 144 - 155 of src/main.p

Yuhan Wang 3 Mar 22, 2022
A Microsoft reward automator, designed to work headless on a raspberry pi

MsReward A Microsoft reward automator, designed to work headless on a raspberry pi. Tested with a pi 3b+ and a pi 4 2Gb . Using a discord bot to log e

null 10 Dec 21, 2022
Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. 💛💙💚

Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. ??????

Raja Rakotonirina 2 Jan 10, 2022
NUM Alert - A work focus aid created for the Hack the Job hackathon

Contributors: Uladzislau Kaparykha, Amanda Hahn, Nicholas Waller Hackathon Team Name: N.U.M General Purpose: The general purpose of this program is to

Amanda Hahn 1 Jan 10, 2022