semvec/pypi-packages huggingface dataset:
sloppy-json 0.2.0
A forgiving JSON parser that recovers broken JSON from LLM outputs
Requires Python: >=3.12
Keywords: forgiving, json, llm, parser, recovery

<p align="center">
  <img src="assets/logo.png" alt="sloppy-json" width="400">
</p>

# sloppy-json

A forgiving JSON parser that recovers broken JSON from LLM outputs.

## Installation

```bash
uv add sloppy-json
```

or with pip:

```bash
pip install sloppy-json
```

## Quick Start

```python
from sloppy_json import parse

# Handles almost any broken JSON (permissive by default)
result = parse("{'name': 'test', 'active': True,}")
# Returns: '{"name": "test", "active": true}'
```

## Usage

```python
from sloppy_json import parse, RecoveryOptions

# Default: permissive parsing (maximum recovery)
result = parse("Here is the JSON: {name: 'test'")  # handles everything

# Strict parsing (standard JSON only)
result = parse('{"key": "value"}', RecoveryOptions(strict=True))

# Custom options
opts = RecoveryOptions(
    allow_single_quotes=True,
    allow_trailing_commas=True,
)
result = parse("{'key': 'value',}", opts)
```

## Features

| Feature | Example Input | Output |
|---------|---------------|--------|
| Single quotes | `{'key': 'value'}` | `{"key": "value"}` |
| Unquoted keys | `{key: "value"}` | `{"key": "value"}` |
| Trailing commas | `{"a": 1,}` | `{"a": 1}` |
| Missing commas | `{"a": 1 "b": 2}` | `{"a": 1, "b": 2}` |
| Python literals | `{"flag": True}` | `{"flag": true}` |
| Truncated JSON | `{"key": "val` | `{"key": "val"}` |
| Code blocks | `` ```json {"a":1}``` `` | `{"a": 1}` |
| Comments | `{"a": 1} // comment` | `{"a": 1}` |
| JS undefined | `{"a": undefined}` | `{"a": null}` |
| NaN/Infinity | `{"a": NaN}` | `{"a": "NaN"}` |

## Auto-detection

Automatically detect what options are needed from sample data:

```python
from sloppy_json import parse, RecoveryOptions

samples = ["{'key': 'value',}", "{name: True}"]
options = RecoveryOptions.detect_from(samples)
# options.allow_single_quotes == True
# options.allow_trailing_commas == True
# options.allow_unquoted_keys == True
# options.convert_python_literals == True

result = parse(new_json, options)
```

## Documentation

- [Getting Started](docs/index.md) - Overview and quick start
- [Options Reference](docs/options.md) - All `RecoveryOptions` explained
- [Auto-Detection](docs/detection.md) - Automatically detect required options
- [Error Handling](docs/errors.md) - Exceptions and partial recovery
- [Examples](docs/examples.md) - Common scenarios and recipes

## Similar Projects

- **[sloppy-xml-py](https://github.com/mitsuhiko/sloppy-xml-py)** - A sloppy XML parser by Armin Ronacher for handling malformed XML. The naming of this project was inspired by sloppy-xml-py.
- **[json5](https://github.com/dpranke/pyjson5)** - A JSON extension that allows comments, trailing commas, and unquoted keys.

## License

MIT
asyncgui 0.10.0.dev0
A minimalistic async library that focuses on fast responsiveness
Requires Python: <4.0,>=3.10
Keywords: async

# AsyncGui

...is a minimalistic async library that:

- does not provide features involving system calls, such as I/O.
- has no external dependencies when using Python 3.11 or later.
- does not own a main loop, but is designed to integrate with an existing one.
- avoids global state.
- focuses on fast responsiveness, allowing immediate task start and resumption.
- offers powerful "structured concurrency" features inspired by [Trio](https://trio.readthedocs.io/en/stable/) and [trio-util](https://trio-util.readthedocs.io/en/latest/).
- has nothing to do with GUIs, even though it has 'gui' in its name. (I should rename it at some point.)

[Documentation](https://asyncgui.github.io/asyncgui/)

## Installation

Pin the minor version.

```text
poetry add asyncgui@~0.9
pip install "asyncgui>=0.9,<0.10"
```

## Tested on

- CPython 3.10
- CPython 3.11
- CPython 3.12
- CPython 3.13
- CPython 3.14
- PyPy 3.10

## Dependants

- [asynckivy](https://github.com/asyncgui/asynckivy)
- [asynctkinter](https://github.com/asyncgui/asynctkinter)
- [asynctkinter-minimum](https://github.com/asyncgui/asynctkinter-minimum)
- [asyncpygame](https://github.com/asyncgui/asyncpygame)
gios 7.0.0
Python wrapper for getting air quality data from GIOŚ servers.
Requires Python: >=3.13

[![GitHub Release][releases-shield]][releases]
[![PyPI][pypi-releases-shield]][pypi-releases]
[![PyPI - Downloads][pypi-downloads]][pypi-statistics]
[![Buy me a coffee][buy-me-a-coffee-shield]][buy-me-a-coffee]
[![PayPal_Me][paypal-me-shield]][paypal-me]
[![Revolut.Me][revolut-me-shield]][revolut-me]

# gios
Python wrapper for getting air quality data from [GIOŚ (Główny Inspektorat Ochrony Środowiska)](http://www.gios.gov.pl/pl/stan-srodowiska/monitoring-jakosci-powietrza)

## How to find station_id
- go to http://powietrze.gios.gov.pl/pjp/current
- find on the map a measurement station located closest to your home
- go to "More infotmation" link
- look at site address, for ex. for this address https://powietrze.gios.gov.pl/pjp/current/station_details/table/10124/3/0 `station_id` is 10124

## How to use package
```python
"""Example for GIOS."""
import asyncio
import logging

from aiohttp import ClientError, ClientSession

from gios import ApiError, Gios, InvalidSensorsData, NoStationError

GIOS_STATION_ID = 568

logging.basicConfig(level=logging.DEBUG)


async def main() -> None:
    """Run main function."""
    async with ClientSession() as websession:
        gios = Gios(GIOS_STATION_ID, websession)
        try:
            data = await gios.async_update()
        except (ApiError, NoStationError, InvalidSensorsData, ClientError) as error:
            print(error)
            return

    latitude = gios.latitude
    longitude = gios.longitude
    station_name = gios.station_name
    print(f"Longitude: {longitude}")
    print(f"Latitude: {latitude}")
    print(f"Station name: {station_name}")
    print(data)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
```
[releases]: https://github.com/bieniu/gios/releases
[releases-shield]: https://img.shields.io/github/release/bieniu/gios.svg?style=popout
[pypi-releases]: https://pypi.org/project/gios/
[pypi-statistics]: https://pepy.tech/project/gios
[pypi-releases-shield]: https://img.shields.io/pypi/v/gios
[pypi-downloads]: https://pepy.tech/badge/gios/month
[buy-me-a-coffee-shield]: https://img.shields.io/static/v1.svg?label=%20&message=Buy%20me%20a%20coffee&color=6f4e37&logo=buy%20me%20a%20coffee&logoColor=white
[buy-me-a-coffee]: https://www.buymeacoffee.com/QnLdxeaqO
[paypal-me-shield]: https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal
[paypal-me]: https://www.paypal.me/bieniu79
[revolut-me]: https://revolut.me/maciejbieniek
[revolut-me-shield]: https://img.shields.io/static/v1.svg?label=%20&message=Revolut&logo=revolut
py-aiterm 0.0.1
A modern, voice-enabled AI terminal assistant with local LLM integration and Model Context Protocol (MCP) support.
Requires Python: >=3.10
Keywords: ai, assistant, llm, mcp, speech-to-text, terminal, text-to-speech, textual, voice

<div align="center">

![ai_term Banner](https://github.com/vsaravind01/ai-term/blob/master/docs/img/banner.png?raw=true)

**ai_term** is an open-source, voice-enabled terminal assistant that integrates LLMs (Large Language Models), Speech-to-Text (STT), and Text-to-Speech (TTS) into a powerful Command Line Interface (CLI) experience.

[![PyPI version](https://img.shields.io/pypi/v/py-aiterm.svg)](https://pypi.org/project/py-aiterm/)
[![Docs Deployment](https://github.com/vsaravind01/ai-term/actions/workflows/deploy_docs.yml/badge.svg)](https://github.com/vsaravind01/ai-term/actions/workflows/deploy_docs.yml)
[![Docker Images](https://github.com/vsaravind01/ai-term/actions/workflows/docker_images.yml/badge.svg)](https://github.com/vsaravind01/ai-term/actions/workflows/docker_images.yml)

</div>

## Features

- **🗣️ Voice Interaction**: Talk to your terminal and hear responses back.
- **🧠 LLM Integration**: Support for Local (Ollama) and Cloud (OpenAI, Anthropic) models.
- **🔌 MCP Support**: Model Context Protocol client for extensible tool use.
- **🖥️ TUI Interface**: Beautiful, responsive terminal UI built with [Textual](https://textual.textualize.io/).
- **⚙️ Dynamic Configuration**: Easy-to-use settings screen for managing providers and secrets.

## Prerequisites

- Python 3.10+
- `uv` (recommended) or `pip`
- `ffmpeg` (required for audio processing)

## Installation

### From PyPI (Recommended for users)
```bash
pip install py-aiterm
```

### From Source (For development)
1. **Clone the repository:**
   ```bash
   git clone https://github.com/vsaravind01/ai-term.git
   cd ai-term
   ```

2. **Install dependencies:**
   ```bash
   uv sync
   # OR with pip
   pip install -e .
   ```

## Quick Start

The application runs as a distributed system with a main CLI and two support microservices.

### 1. Start Support Services

Run the following command to start the STT and TTS services in the background:

```bash
ai-term start
```

This pulls pre-built Docker images from GHCR and starts the services.

### 2. Check Status (Optional)
You can verify the services are running with:

```bash
ai-term status
```

### 3. Start the CLI
In your main terminal:

```bash
uv run ai-term
```

## Documentation

Full documentation is available in the `docs/` directory. To view it locally:

```bash
uv run mkdocs serve
```

- [**Setup Guide**](docs/setup.md)
- [**Docker Guide**](docs/docker.md)
- [**CLI Documentation**](docs/cli/index.md)
- [**API Reference**](docs/api.md)

## License

[MIT](LICENSE)
zelas2 1.3.0.251228
a ligh weight menu , support both win and mac 
Keywords: python, menu, dumb_menu, windows, mac, linux


Warming：推荐的pyvista版本为0.43.7，推荐的vtk版本为9.4.1

1.3.0.251228更新日志
1.更新了深度学习数据准备的相关函数
2.新增了SJMI计算代码

1.2.3.251119更新日志

1.优化了一个改进JCFI的计算函数
2.增加了一个计算隧道点云弧长的函数

1.2.2 251110更新日志

1.增加了环间错台计算函数
2.增加了环内错台计算函数

1.2.1 251104更新日志

1. 新增了读取.bin文件的函数
2. 优化了基于pyvista显示和保存点云的函数
3. 优化了基于累加强度值峰值极值算法的环缝提取

1.2.0 250822更新日志

1.shield_plus

(1).get_JCFI_mp:计算JCFI指数(基于并行计算)

(2).get_VY:计算单点的Y方向分量

(3).get_HF_bulge:找到凸起环缝的索引，非环缝的索引和环缝的截面区间

(4).get_HF_JCFI:基于JCFI指数提取环缝(基于并行计算)(使用共享内存技术)

(5).cut_DGH:分割盾构环

1.1.5 250717更新日志

1.shield\_plus

(1).Curvature\_r\_mp:按照球半径并行计算曲率(建议每次数据量不要超过3个盾构环)
(2).Curvature\_r\_block:分块按照球半径计算曲率
(3).Curvature\_r:非并行按照球半径计算曲率

1.1.4.250714更新日志

1.shield\_plus

(1).find\_CS\_25: 环缝提取\_固定长度版\_25年修补版
(2).fit\_3d\_circle: 拟合单个三维圆
(3).fit\_3d\_circle\_mp: 并行拟合三维圆
(4).STSD\_add\_C: 对STSD数据集添加截面序列号
(5).get\_nei\_dis\_mp: 并行求每个点的平均凸起（占用内存巨大，建议线程数不超过核心数）
(6).get\_nei\_line\_density\_mp: 并行求每个的点所在截面的左右密度比(结果会打乱顺序，要求点云按照截面从小到大排序：ps = ps\[ps\[:, 4].argsort()]后再合并)

1.1.3.250421更新日志

1.shield.cut\_down 进行了优化，对各个线程都比较友好

1.1.2.250310更新日志
1.新增shield\_plus项目文件

(1).find\_continuous\_segments\_numpy:找到一维数组中所有连续整数段的起始和终止数，返回 NumPy 数组

(2).get\_ρθ:求每个盾构环的极径差和反正切

(3).find\_seed:寻找符合纵缝特征的种子点[setup.py](setup.py)

(4).find\_seed\_cs:寻找单个截面符合纵缝特征的种子点

(5).distance\_to\_line:计算点到直线的几何距离(二维)[setup.py](setup.py)

(6).merge\_similar\_lines:合并相似直线（极坐标参数相近的线段）

(7).find\_lines:通过数字图像操作将纵缝找到并返回种子点

(8).merge\_similar\_lines:合并角度和位置相近的线段

(9).fit\_3d\_line:拟合三维直线

(10).distance\_to\_line\_3D:计算点到三维直线的距离

2.shield项目文件新增了三种环缝提取算法

1.1.1.241227更新日志

1.新增了.mmdet3d\_base 深度学习自定义数据集支撑代码（需要加装pytorch和mmengine）：

（1）.get\_pts\_paths：批量获得点云数据路径

（2）.cut\_points：将大点云分割成小块点云，并将绝对坐标系转换成相对中心坐标系

（3）.reset\_z\_intensity：重置点云的z坐标和强度值

（4）.np2bin\_batch：numpy点云批量转为.bin格式

（5）.np2label\_batch：numpy点云标签批量生成.bin格式标签

（6）.np2ImageSets\_batch：生成训练集、验证集和测试集.txt

（7）.create\_pkl：通过数据集生成mmdet3d所能接受的仿seg\_kitti的.pkl

2.暂停了图割和超体素理论的开发项目

3.对.TheHeartOfTheMilitaryGod新增了一些功能

（1）.ground\_ps2DEM：地面点转DEM,并返回网格坐标（可自行填补空洞）

（2）.get\_buildDSM：在建立DEM网格的情况下建立建筑物DSM

1.0.3.241205更新日志

1.增加了基于点集拟合直线到椭圆\\圆的切角剔除非衬砌点的算法，效果和基于角度差的不相上下

2.删除了部分含有bug或已经无法使用的代码

1.0.2.241111更新日志

1.增加了改进PCA算法

2.修复了zelas转zelas2的问题

3.新增了图割和超体素理论的开发项目
accuweather 5.0.0
Python wrapper for getting weather data from AccuWeather API.
Requires Python: >=3.13

[![GitHub Release][releases-shield]][releases]
[![PyPI][pypi-releases-shield]][pypi-releases]
[![PyPI - Downloads][pypi-downloads]][pypi-statistics]
[![Buy me a coffee][buy-me-a-coffee-shield]][buy-me-a-coffee]
[![PayPal_Me][paypal-me-shield]][paypal-me]
[![Revolut.Me][revolut-me-shield]][revolut-me]

# accuweather

Python wrapper for getting weather data from AccuWeather API.


## API key

To generate API key go to https://developer.accuweather.com/subscriptions and after registration create an app.


## How to use package
```python
"""Example of usage."""
import asyncio
import logging

from aiohttp import ClientError, ClientSession

from accuweather import (
    AccuWeather,
    ApiError,
    InvalidApiKeyError,
    InvalidCoordinatesError,
    RequestsExceededError,
)

LATITUDE = 52.0677904
LONGITUDE = 19.4795644
API_KEY = "xxxxx"

logging.basicConfig(level=logging.DEBUG)


async def main():
    """Run main function."""
    async with ClientSession() as websession:
        try:
            accuweather = AccuWeather(
                API_KEY,
                websession,
                latitude=LATITUDE,
                longitude=LONGITUDE,
                language="pl",
            )
            current_conditions = await accuweather.async_get_current_conditions()
            forecast_daily = await accuweather.async_get_daily_forecast(
                days=5, metric=True
            )
            forecast_hourly = await accuweather.async_get_hourly_forecast(
                hours=12, metric=True
            )
        except (
            ApiError,
            InvalidApiKeyError,
            InvalidCoordinatesError,
            ClientError,
            RequestsExceededError,
        ) as error:
            print(f"Error: {error}")
        else:
            print(f"Location: {accuweather.location_name} ({accuweather.location_key})")
            print(f"Requests remaining: {accuweather.requests_remaining}")
            print(f"Current: {current_conditions}")
            print(f"Forecast: {forecast_daily}")
            print(f"Forecast hourly: {forecast_hourly}")


loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
```

[releases]: https://github.com/bieniu/accuweather/releases
[releases-shield]: https://img.shields.io/github/release/bieniu/accuweather.svg?style=popout
[pypi-releases]: https://pypi.org/project/accuweather/
[pypi-statistics]: https://pepy.tech/project/accuweather
[pypi-releases-shield]: https://img.shields.io/pypi/v/accuweather
[pypi-downloads]: https://pepy.tech/badge/accuweather/month
[buy-me-a-coffee-shield]: https://img.shields.io/static/v1.svg?label=%20&message=Buy%20me%20a%20coffee&color=6f4e37&logo=buy%20me%20a%20coffee&logoColor=white
[buy-me-a-coffee]: https://www.buymeacoffee.com/QnLdxeaqO
[paypal-me-shield]: https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal
[paypal-me]: https://www.paypal.me/bieniu79
[revolut-me-shield]: https://img.shields.io/static/v1.svg?label=%20&message=Revolut&logo=revolut
[revolut-me]: https://revolut.me/maciejbieniek
scm-python-core 1.3.0.dev0
An core plugin Python project to use cli manage it
Requires Python: >=3.9

# SCM-PYTHON CORE 开发

## 插件开发规范

1. package name start with 'scm-python-'
1. the python code should be in folder 'scm_python_', The folder name and the plugin name should be similar.
1. the inner module name should be in "lib, tapps, tutils"
1. the sample see [Shao/scm-python-jira](https://de.vicp.net:58443/Shao/scm-python-jira)

## 插件使用规范

1. pip install scm-python-any-plugin, then the plugin will be loader automatically
1. or update ~/any-host-name/etc/install.runtime.yaml, add the plugin python code folder name into "python/exteral_lib"
quack-sleep-doctor 0.2.0
A small utility to remind you to go to sleep.
Requires Python: >=3.12

# Quack Sleep Doc

> Not an actual doctor or a serious sleep helper! If you need that consult a real doctor!

A tool that reminds you to go to bed at a time you configured.


## Setup

Then, you create a config file in `~/.config/quack-sleep/config.json`.

```json
{
    "language": "de",
    "reminder_time": "22:10",
    "countdown_initial": 20,
    "countdown_reduction": 5,
    "countdown_minimum": 1
}
```

Optionally, you can configure your own messages that remind you to go to sleep in `~/.config/quack-sleep/messages.txt`. Where each line is a message. Here is an example file in german.

```
Morgen wirst du froh sein, dass du jetzt schlafen gehst.
Schlaf ist wie ein kostenloses Upgrade.
Dein Gehirn ruft an: Es möchte ins Bett.
Produktivität beginnt mit Erholung.
Selbst KI gönnt sich Ruhezyklen – du solltest das auch.
```

Finally, once you have everything configured, you should add the script to the autostart to make sure it always runs.

**Linux**: Assuming you have screen (`apt install screen`) you can add the following to the bottom of your `~/.profile` file.

```bash
protected_screen() {
    local name="$1"
    shift

    if [ -z "$name" ]; then
        echo "Usage: protected_screen <session-name> <command> [args...]"
        return 1
    fi

    # Check if the screen session already exists
    if screen -ls | grep -q "[.]${name}[[:space:]]"; then
        return 0
    fi

    if [ $# -eq 0 ]; then
        echo "No command provided. You must provide a command."
        return 1
    else
        screen -dmS "$name" "$@"
    fi
}

protected_screen quack-sleep uvx quack-sleep-doctor
```

**Windows**: Here we will use the ps1 script provided in the repository to launch the app. First clone the repository, then run `uv sync` to install it. Lastly, add the start.ps1 to your autostart folder.
wood-nano 0.3.5
Binding for wood project that is compiled into a binding using nanobind and scikit-build
Requires Python: >=3.9

wood_nano
=========

Python bindings for the [wood](https://github.com/petrasvestartas/wood) C++ library using [nanobind](https://github.com/wjakob/nanobind).

|      CI              | status |
|----------------------|--------|
| Build                | [![Build](https://github.com/petrasvestartas/wood_nano/actions/workflows/build.yml/badge.svg)](https://github.com/petrasvestartas/wood_nano/actions/workflows/build.yml) |
| Release              | [![Release](https://github.com/petrasvestartas/wood_nano/actions/workflows/release.yml/badge.svg)](https://github.com/petrasvestartas/wood_nano/actions/workflows/release.yml) |

Quick Start
-----------

```bash
pip install wood_nano
```

```python
import wood_nano as m
print(m.add(1, 2))
```

Build from Source
-----------------

All C++ dependencies (CGAL, Boost, Eigen, etc.) are downloaded automatically by CMake.

### Windows

```bash
git clone --recursive https://github.com/petrasvestartas/wood_nano.git
cd wood_nano
pip install uv
uv venv .venv
.venv\Scripts\activate
uv pip install -r requirements-dev.txt
uv pip install --no-build-isolation -ve .
```

### macOS

```bash
git clone --recursive https://github.com/petrasvestartas/wood_nano.git
cd wood_nano
pip install uv
uv venv .venv
source .venv/bin/activate
uv pip install -r requirements-dev.txt
uv pip install --no-build-isolation -ve .
```

### Linux

```bash
git clone --recursive https://github.com/petrasvestartas/wood_nano.git
cd wood_nano
pip install uv
uv venv .venv
source .venv/bin/activate
uv pip install -r requirements-dev.txt
uv pip install --no-build-isolation -ve .
```

Test
----

```bash
python -c "import wood_nano as m; print(m.add(1, 2))"
```

PyPI Release
------------

Releases are automated via GitHub Actions using trusted publishing.

**One-time setup (PyPI):**
1. Go to https://pypi.org/manage/account/publishing/
2. Add pending publisher:
   - Project: `wood_nano`
   - Owner: `petrasvestartas`
   - Repository: `wood_nano`
   - Workflow: `release.yml`

**To publish a new version:**

1. Update the version number in `src/wood_nano/__init__.py`:
   ```python
   __version__ = "0.3.0"  # Change to new version
   ```

2. Commit the version change:
   ```bash
   git add src/wood_nano/__init__.py
   git commit -m "Bump version to 0.3.0"
   git push
   ```

3. Create and push the tag:
   ```bash
   git tag v0.3.0
   git push origin v0.3.0
   ```

This triggers the release workflow which builds wheels for all platforms and publishes to PyPI.

Development
-----------

Update wood submodule:
```bash
git submodule update --init --recursive
```

Clean rebuild:
```bash
rm -rf build .deps
pip install --no-build-isolation -ve .
```
decitobin 2025.6
A widget to convert decimal to binary, binary to decimal, ASCII to binary
Requires Python: >=3.10

# 🔢 decitobin WebStyle 🧒🔢

**decitobin** is a versatile Python tool that converts between number systems and text — now with a web-style user interface and enhanced features.

Whether you're converting decimal to binary, exploring ASCII encoding, or transforming hexadecimal strings, decitobin offers an interactive and beginner-friendly experience.

---

## 🌟 Features

🧠 Support for multiple conversions:
Decimal → Binary  Binary → Decimal  ASCII → Binary  Binary → ASCII  Hex → Binary  Binary → Hex  Binary → Octal  Octal → Binary  Duodecimal → Decimal  Decimal →  Duodecimal  

🖥️ Graphical interface with dropdown selection (Tkinter-based)  
🚀 Instant results with detailed formatting  
📋 Copy output to clipboard  
📦 Easy to install and run on any platform  

---

## 💻 Installation  

```sh
pip install decitobin
```

## Launching the App  
Run the converter using:  
```sh
python -m decitobin
```
Or run your own launcher script using:  
```python
import decitobin

print(decitobin.dec2bin("12"))        # Output: 1100
print(decitobin.ascii2bin("A"))       # Output: 01000001
print(decitobin.bin2hex("1011"))      # Output: B
print(decitobin.bin2oct("101110"))    # Output: 56
print(decitobin.oct2bin("56"))        # Output: 101110
print(decitobin.dec2duodec(23))       # Output:  1B
```
## What is Duodecimal?  
Duodecimal, or base-12, is a number system with 12 characters include 0-9 and A, B.  
## License
Licensed under the MIT License.