semvec/pypi-packages huggingface dataset:
lager 0.20.1
EZ-PZ logging based on loguru
Requires Python: <4.0,>=3.11
Keywords: beer, dgi, dgpy, logging, loguru

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# lager :beer:

[![Wheel](https://img.shields.io/pypi/wheel/lager.svg)](https://img.shields.io/pypi/wheel/lager.svg)
[![Version](https://img.shields.io/pypi/v/lager.svg)](https://img.shields.io/pypi/v/lager.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/lager.svg)](https://img.shields.io/pypi/pyversions/lager.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**Install:** `pip install lager`

Logging library based off of loguru (`pip install loguru`).

**Why not just use loguru?**

- Lager is a better pun
- Lager is really a utility pack for loguru

BTW: Loguru is an amazing lib. Check it out: https://github.com/Delgan/loguru

## Usage:

```python
from lager import LOG, lager, LAGER, log, logger  # All the same object

LOG.info("info")
```

    2022-07-21 08:38:20.263 | INFO     | __main__:<cell line: 3>:3 - info
h5 0.12.1
H5py utils
Requires Python: <4.0,>=3.11
Keywords: h5, h5py, hdf5, numpy

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# h5

[![Wheel](https://img.shields.io/pypi/wheel/h5.svg)](https://img.shields.io/pypi/wheel/h5.svg)
[![Version](https://img.shields.io/pypi/v/h5.svg)](https://img.shields.io/pypi/v/h5.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/h5.svg)](https://img.shields.io/pypi/pyversions/h5.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**Install:** `pip install h5`

---

Util functions for h5py and home of recursive generators!
funkify 0.7.1
Funkify modules so that they are callable
Requires Python: <4.0,>=3.11
Keywords: dgpy, funk, funky, modules, python

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# funkify

[![Wheel](https://img.shields.io/pypi/wheel/funkify.svg)](https://img.shields.io/pypi/wheel/funkify.svg)
[![Version](https://img.shields.io/pypi/v/funkify.svg)](https://img.shields.io/pypi/v/funkify.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/funkify.svg)](https://img.shields.io/pypi/pyversions/funkify.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**Install:** `pip install funkify`

Make a module/package/script callable.

## Usage:

### 1) Write a file called `a_module.py` with some function and decorate said function with funkify

```python
import funkify

@funkify
def some_funk_name_doesnt_matter():
	return 'howdy'
```

### 2) Import a_module and call it like you would a function!

```python
import a_module
a_module.some_funk_name_doesnt_matter_what_it_is()  # returns 'howdy'
a_module()  # ALSO returns 'howdy'
```
fmts 0.4.1
str transformation utils
Requires Python: <4.0,>=3.11
Keywords: dgpy, str, typed, utils, vanilla

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# fmts

[![Wheel](https://img.shields.io/pypi/wheel/fmts.svg)](https://img.shields.io/pypi/wheel/fmts.svg)
[![Version](https://img.shields.io/pypi/v/fmts.svg)](https://img.shields.io/pypi/v/fmts.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/fmts.svg)](https://img.shields.io/pypi/pyversions/fmts.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**Install:** `pip install fmts` OR `uv add fmts`

**What:** typed & tested simple python string utils
asyncify 0.12.1
sync 2 async
Requires Python: <4.0,>=3.11
Keywords: async, asyncify, asyncio, dgpy

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# asyncify

[![Wheel](https://img.shields.io/pypi/wheel/asyncify.svg)](https://img.shields.io/pypi/wheel/asyncify.svg)
[![Version](https://img.shields.io/pypi/v/asyncify.svg)](https://img.shields.io/pypi/v/asyncify.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/asyncify.svg)](https://img.shields.io/pypi/pyversions/asyncify.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**TLDR:** Sync 2 Async decorator

**Install:** `pip install asyncify`

**Usage:**

```python
import asyncify

# OR
from asyncify import asyncify
from asyncify import run  # asyncio.run polyfill for python36


def add(a, b):
    return a + b


assert add(1, 2) == 3


@asyncify
def add_async(a, b):
    return a + b


res = await add_async(1, 2)
assert res == 3
```
aiopen 0.8.1
Async file io
Requires Python: <4.0,>=3.11
Keywords: aiopen, anyio, async, dgpy, fs

<a href="https://github.com/dynamic-graphics-inc/dgpy-libs">
<img align="right" src="https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true" alt="drawing" height="120" width="300"/>
</a>

# aiopen

[![Wheel](https://img.shields.io/pypi/wheel/aiopen.svg)](https://img.shields.io/pypi/wheel/aiopen.svg)
[![Version](https://img.shields.io/pypi/v/aiopen.svg)](https://img.shields.io/pypi/v/aiopen.svg)
[![py_versions](https://img.shields.io/pypi/pyversions/aiopen.svg)](https://img.shields.io/pypi/pyversions/aiopen.svg)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

**Install:** `pip install aiopen`

Async-open

**Why not use aiofiles?**

- Wanted more type annotations
- aiofiles uses ye ole `@coroutine` decorator -- aiopen uses python3.6+ `async/await`
- aiopen is a callable module, so you can do:
  - `import aiopen`
  - `async with aiopen('afile.txt', 'w') as f: await f.write('some text!')`
  - `async with aiopen('afile.txt', 'r') as f: content = await f.read()`

(Big shouts out to the aiofiles people, aiopen is entirely based off of aiofiles)

## Usage:

Just import it! The module is also callable!

```python
import aiopen

async with aiopen('afile.txt', 'w') as f:
    await f.write('some text!')

async with aiopen('afile.txt', 'r') as f:
    content = await f.read()
    print(content)
```
django-gerente 0.0.2
A reusable App for serious big Django projects that don't take themselves too seriously.
Requires Python: >=3.11
Keywords: django

==============
django-gerente
==============

A reusable app that provides utilities and common functionality for big 
Django projects developed by the tuGerente.com team.

Installation
------------

::

  pip install django-gerente


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

- Run tests with: `pytest`
- Build package: `just build` (uses `uv build`)
oaxaca 1.0.3
Oaxaca Blinder decomposition
Requires Python: <4.0,>=3.9
Keywords: python

# oaxaca

[![Release](https://img.shields.io/github/v/release/anhqle/oaxaca)](https://img.shields.io/github/v/release/anhqle/oaxaca)
[![Build status](https://img.shields.io/github/actions/workflow/status/anhqle/oaxaca/main.yml?branch=main)](https://github.com/anhqle/oaxaca/actions/workflows/main.yml?query=branch%3Amain)
[![codecov](https://codecov.io/gh/anhqle/oaxaca/branch/main/graph/badge.svg)](https://codecov.io/gh/anhqle/oaxaca)
[![Commit activity](https://img.shields.io/github/commit-activity/m/anhqle/oaxaca)](https://img.shields.io/github/commit-activity/m/anhqle/oaxaca)
[![License](https://img.shields.io/github/license/anhqle/oaxaca)](https://img.shields.io/github/license/anhqle/oaxaca)

- **Github repository**: <https://github.com/anhqle/oaxaca/>
- **Documentation** <https://anhqle.github.io/oaxaca/>

The Oaxaca-Blinder decomposition is a statistical method used to explain the difference in outcomes between two groups by decomposing it into:

- A part that is "explained" by differences in group predictor
- A part that remains "unexplained"

For example, the gender wage gap can be partly "explained" by the difference in education and work experience between men and women. The remaining "unexplained" part is typically considered discrimination.

For a methodological review, see Jann (2008) and Fortin et al. (2011).

## Why use this package?

If possible, you should use the Stata package `oaxaca`, which is the most feature-rich implementation (Jann, 2008). If you can't, existing implementations in R and Python are lacking:

1. The R [`oaxaca` package](https://cran.r-project.org/web/packages/oaxaca/index.html) does not permit more than 1 categorical variable ([discussion](https://stats.stackexchange.com/questions/543828/blinder-oaxaca-decomposition-and-gardeazabal-and-ugidos-2004-correction-in-the))
2. The Python [implementation in `statsmodels`](https://www.statsmodels.org/dev/generated/statsmodels.stats.oaxaca.OaxacaBlinder.html) only decomposes into the explained and unexplained part, without a "detailed decomposition" into the contribution of each predictor

For industry data science work, these limitations are prohibitive. This package thus fills in the gap by providing:

1. As table stakes, two-fold and three-fold decomposition, with detailed decomposition for each predictor
2. Multiple ways to deal with the "omitted base category problem" (see [below](#the-omitted-base-category-problem))
3. Automatic handling of the case when the two groups don't have a common support. For example, some occupations may only exist in 1975 and not 2025, and vice versa
4. Rich HTML table output