# kwix

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## Developer Guide

### Setup

``` sh
# create conda environment
$ mamba env create -f env.yml

# update conda environment
$ mamba env update -n kwix --file env.yml
```

### Install

``` sh
pip install -e .

# install from pypi
pip install kwix
```

### nbdev

``` sh
# activate conda environment
$ conda activate kwix

# make sure the kwix package is installed in development mode
$ pip install -e .

# make changes under nbs/ directory
# ...

# compile to have changes apply to the kwix package
$ nbdev_prepare
```

### Publishing

``` sh
# publish to pypi
$ nbdev_pypi

# publish to conda
$ nbdev_conda --build_args '-c conda-forge'
$ nbdev_conda --mambabuild --build_args '-c conda-forge -c dsm-72'
```

# Usage

## Installation

Install latest from the GitHub
[repository](https://github.com/dsm-72/kwix):

``` sh
$ pip install git+https://github.com/dsm-72/kwix.git
```

or from [conda](https://anaconda.org/dsm-72/kwix)

``` sh
$ conda install -c dsm-72 kwix
```

or from [pypi](https://pypi.org/project/kwix/)

``` sh
$ pip install kwix
```

## Documentation

Documentation can be found hosted on GitHub
[repository](https://github.com/dsm-72/kwix)
[pages](https://dsm-72.github.io/kwix/). Additionally you can find
package manager specific guidelines on
[conda](https://anaconda.org/dsm-72/kwix) and
[pypi](https://pypi.org/project/kwix/) respectively.

## Toy Inheritance

``` python
@dataclass
class Foo(KWix):
    _: KW_ONLY
    a: int = 1
    b: int = 2
    c: int = 3

@dataclass
class Qux(KWix):
    _: KW_ONLY
    q: str = -2
    u: str = -1
    x: int = 0
```

``` python
@dataclass
class Bar(Foo):
    _: KW_ONLY
    x: int = 7
    y: int = 8
    z: int = 9

@dataclass
class Baz(Bar, Qux):
    _: KW_ONLY
    a: int = 6
    b: int = 7
    q: int = 0

@dataclass
class Auz(Bar):
    _: KW_ONLY
```

## Seaborn

Since Seaborn Clustermap passes all extra keyword-arguments to Heatmap
using [`KWix`](https://dsm-72.github.io/kwix/mixs.html#kwix) can make it
easy to know what these parameters are and easy to pass them accordingly

``` python
@dataclass
class SeabornHeatmap(KWix):
    _: KW_ONLY    
    # heatmap parameters
    vmin: Optional[float] = None
    vmax: Optional[float] = None
    cmap: Optional[str] = 'inferno'
    center: Optional[float] = None
    robust: bool = True
    annot: Optional[bool] = None
    fmt: Optional[str] = '.2g'
    annot_kws: Optional[dict] = None
    linewidths: Optional[float] = 0
    linecolor: Optional[str] = 'white'
    cbar: bool = True
    cbar_kws: Optional[dict] = None
    cbar_ax: Optional['Axes'] = None
    square: bool = False
    xticklabels: Union[bool, list, str, bool] = 'auto'
    yticklabels: Union[bool, list, str, bool] = 'auto'
    mask: Optional[Union['NPArray', 'DataFrame']] = None
    ax: Optional['Axes'] = None
```

``` python
@dataclass
class SeabornClustermap(SeabornHeatmap, KWix):
    _: KW_ONLY    
    # clustermap parameters
    pivot_kws: Optional[dict] = None
    method: 'LinkageMethod' = 'SINGLE'
    metric: 'PDistMetric' = 'CORRELATION'
    z_score: Optional[int] = 0
    standard_scale: Optional[int] = None
    figsize: Tuple[int, int] = (10, 10)
    cbar_kws: Optional[dict] = None
    row_cluster: bool = True
    col_cluster: bool = True
    row_linkage: Optional[dict] = None
    col_linkage: Optional[dict] = None
    row_colors: Optional[dict] = None
    col_colors: Optional[dict] = None
    mask: Optional[dict] = None
    dendrogram_ratio: float = 0.2
    colors_ratio: float = 0.03
    cbar_pos: 'CBarPos' = (0.02, 0.8, 0.05, 0.18)
    tree_kws: Optional[dict] = None
```

``` python
clstmap = SeabornClustermap()
```

``` python
clstmap.curvals()
```

    {'cbar_kws': None,
     'cbar_pos': (0.02, 0.8, 0.05, 0.18),
     'col_cluster': True,
     'col_colors': None,
     'col_linkage': None,
     'colors_ratio': 0.03,
     'dendrogram_ratio': 0.2,
     'figsize': (10, 10),
     'mask': None,
     'method': 'SINGLE',
     'metric': 'CORRELATION',
     'pivot_kws': None,
     'row_cluster': True,
     'row_colors': None,
     'row_linkage': None,
     'standard_scale': None,
     'tree_kws': None,
     'z_score': 0}

``` python
clstmap.inhvals()
```

    {'annot': None,
     'annot_kws': None,
     'ax': None,
     'cbar': True,
     'cbar_ax': None,
     'center': None,
     'cmap': 'inferno',
     'fmt': '.2g',
     'linecolor': 'white',
     'linewidths': 0,
     'robust': True,
     'square': False,
     'vmax': None,
     'vmin': None,
     'xticklabels': 'auto',
     'yticklabels': 'auto'}

``` python
clstmap.allvals()
```

    {'annot': None,
     'annot_kws': None,
     'ax': None,
     'cbar': True,
     'cbar_ax': None,
     'cbar_kws': None,
     'cbar_pos': (0.02, 0.8, 0.05, 0.18),
     'center': None,
     'cmap': 'inferno',
     'col_cluster': True,
     'col_colors': None,
     'col_linkage': None,
     'colors_ratio': 0.03,
     'dendrogram_ratio': 0.2,
     'figsize': (10, 10),
     'fmt': '.2g',
     'linecolor': 'white',
     'linewidths': 0,
     'mask': None,
     'method': 'SINGLE',
     'metric': 'CORRELATION',
     'pivot_kws': None,
     'robust': True,
     'row_cluster': True,
     'row_colors': None,
     'row_linkage': None,
     'square': False,
     'standard_scale': None,
     'tree_kws': None,
     'vmax': None,
     'vmin': None,
     'xticklabels': 'auto',
     'yticklabels': 'auto',
     'z_score': 0}
