Metadata-Version: 2.1
Name: casregnum
Version: 1.0.1
Summary: casregnum provides a Python class 'CAS' for working with CAS Registry Numbers®. It allows managing, sorting and checking CAS numbers.
Home-page: https://github.com/molshape/CASRegistryNumbers
Author: Axel Müller
Author-email: molshape@gmx.net
Maintainer: molshape
Maintainer-email: molshape@gmx.net
License: LICENSE
Project-URL: Bug Tracker, https://github.com/molshape/CASRegistryNumbers/issues
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Chemistry
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE

# casregnum

![PyPI](https://img.shields.io/pypi/v/casregnum)
![pytest](https://github.com/molshape/CASRegistryNumbers/actions/workflows/python-app.yml/badge.svg)

Python class to manage, check and sort CAS Registry Numbers&reg; (CAS RN&reg;).

<details>
<summary>Table of Content</summary>

1. [Description](#description)
2. [How to install and uninstall?](#how-to-install-and-uninstall)
3. [How to use?](#how-to-use)
4. [Examples](#examples)
	
</details>

## Description
**casregnum** is a Python class to manage, check, and sort CAS Registry Numbers&reg; (CAS RN&reg;) by the [Chemical Abstracts Service](https://www.cas.org/). Check their official [FAQ website](https://www.cas.org/support/documentation/chemical-substances/faqs) for more information on CAS numbers.


## How to install and uninstall? 
**casregnum** can be installed from the [Python Package Index (PyPI)](https://pypi.org/) repository by calling

	pip install casregnum

In order to uninstall **casregnum** from your local environment use

	pip uninstall casregnum


## How to use?
**casregnum** provides the `CAS` class for creating a CAS Registry Number&reg; instance:

```Python
from casregnum import CAS

substance = CAS(cas_rn)
```

Note that `cas_rn` can either be an integer or a string. If you provide an integer, the `CAS` class will take care of formatting the CAS RN&reg; for you. If you provide a string, it needs to comply with the CAS number formatting rules, i. e. *2-7 digits* **dash** *two digits* **dash** *single check digit* (_____00-00-0).

The `CAS` class offers the following three properties:

```Python
.cas_string   # CAS number formatted as a string
.cas_integer  # CAS number as an integer
.check_digit  # check digit of the CAS number
```

## Examples:

```Python
from casregnum import CAS

caffeine = CAS(58_08_2)
theine = CAS("58-08-2")
l_lacticacid = CAS(79_33_4)
d_lacticacid = CAS(10326_41_7)
octanes = [
    CAS(111_65_9), CAS(592_27_8), CAS(589_81_1), CAS(589_53_7), CAS( 590_73_8), CAS(584_94_1),
    CAS(589_43_5), CAS(592_13_2), CAS(563_16_6), CAS(583_48_2), CAS( 619_99_8), CAS(564_02_3),
    CAS(540_84_1), CAS(560_21_4), CAS(565_75_3), CAS(609_26_7), CAS(1067_08_9), CAS(594_82_1),
]

print(f"str: {caffeine}")
print(f"int: {theine.cas_integer}")
print(f"check digit: {caffeine.check_digit}")
print(f"{caffeine} == {theine}: {caffeine == theine}")
print(f"{caffeine} > {theine}: {caffeine > theine}")
print(f"{l_lacticacid} > {d_lacticacid}: {l_lacticacid > d_lacticacid}")
print(f"{l_lacticacid} < {d_lacticacid}: {l_lacticacid < d_lacticacid}")

for i, isomer in enumerate(sorted(octanes), start=1):
    print(f"{isomer:>9}", end=", ")
    if i % 6 == 0:
        print()
```

will generate the following output:

```
str: 58-08-2
int: 58082
check digit: 2
58-08-2 == 58-08-2: True
58-08-2 > 58-08-2: False
79-33-4 > 10326-41-7: False
79-33-4 < 10326-41-7: True
 111-65-9,  540-84-1,  560-21-4,  563-16-6,  564-02-3,  565-75-3,
 583-48-2,  584-94-1,  589-43-5,  589-53-7,  589-81-1,  590-73-8,
 592-13-2,  592-27-8,  594-82-1,  609-26-7,  619-99-8, 1067-08-9,
```



