Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DIYer22/boxx
Tool-box for efficient build and debug in Python. Especially for Scientific Computing and Computer Vision.
https://github.com/DIYer22/boxx
awesome-python computer-vision debug debugging deep-learning hack pytorch pytorch-debug scientific-computing toolbox
Last synced: about 2 months ago
JSON representation
Tool-box for efficient build and debug in Python. Especially for Scientific Computing and Computer Vision.
- Host: GitHub
- URL: https://github.com/DIYer22/boxx
- Owner: DIYer22
- Created: 2017-11-26T09:35:12.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-30T08:45:17.000Z (10 months ago)
- Last Synced: 2024-11-14T20:16:59.797Z (2 months ago)
- Topics: awesome-python, computer-vision, debug, debugging, deep-learning, hack, pytorch, pytorch-debug, scientific-computing, toolbox
- Language: Python
- Homepage:
- Size: 6.07 MB
- Stars: 492
- Watchers: 18
- Forks: 39
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
**Language :** [![English](https://jaywcjlove.github.io/sb/lang/english.svg)](https://github.com/DIYer22/boxx) [![Chinese](https://jaywcjlove.github.io/sb/lang/chinese.svg)](./README_zh_cn.md)
Box-X
Hack Python and Vision
A Tool-box for Efficient Build and Debug in Python. Especially for Scientific Computing and Computer Vision.
### [Introduce](#1-introduce) | [Install](#2-install) | [Tutorial](#3-tutorial) | [Examples](#4-examples) | [Acknowledgments](#5-acknowledgments)
---
## 1. Introduce**`Box-X`** is a Tool-box for Efficient Build and Debug in Python.
Especially for **Scientific Computing** and **Computer Vision**.
So, all Tools are divided into 2 parts by wether the tool is general used:
* **General Python Tool**: Tools could be used anywhere in Python* **Scientific Computing and Computer Vision Tool**: Those tools are useful in Scientific Computing and Computer Vision field
P.S. **`boxx`** supports both **`Python 2/3`** on **`Linux | macOS | Windows`** with **`CPython | IPython | Spyder | Notebook`** environment.
## 2. Install
```
pip install boxx
```## 3. Tutorial
**`Box-X`**'s Tutorial is a Jupyter Notebook file
There are 3 methods to run or view this Notebook file
#### Method 1: Executable Interactive Online Notebook
We use [Binder](https://mybinder.org) to run Tutorial Notebook in an executable interactive online jupyer environment.
That's mean you can **run code in notebook rightnow** in your browser without download or install anything.
* [**=> Executable Interactive Online Tutorial**](https://mybinder.org/v2/gh/DIYer22/boxx-ipynb/master?filepath=tutorial_for_boxx.ipynb)#### Method 2: Download and Run at Local
```bash
git clone https://github.com/DIYer22/boxx
cd boxx/
python setup.py install
jupyter notebook
```
Then open `./tutorial_for_boxx.ipynb` in notebook.#### Method 3: Static Noetbook
Just view the Tutorial Notebook.
* [**=> Static Tutorial**](https://nbviewer.jupyter.org/github/DIYer22/boxx-ipynb/blob/master/tutorial_for_boxx.ipynb)## 4. Examples
Examples are divided into 2 parts too.
**General Python Tool** on left, **Scientific Computing and Computer Vision Tool** on right.
💡 **Note:**
* *Click the image will see more clearer image, and if image is GIF, GIF will be replayed*
* *The following content is layout of desktop browser, if you are viewing through a mobile browser, it is recommended to visit [**=> Static Tutorial**](https://nbviewer.jupyter.org/github/DIYer22/boxx-ipynb/blob/master/tutorial_for_boxx.ipynb)*
### General Python Tool
#### ▶ `p/x` is better way to `print(x)`
`p/x` will `print(x)` and return `x`
[![click to restart GIF and see more clearer GIF](./other/img/p.png)](./other/img/p.png)
💡 **Note:** `p/x` is easy to print value in expression.
#### ▶ Use `g.name = x` or `g.name/x` to transport variable to Python interactive console
[![click to restart GIF and see more clearer GIF](./other/gif/g.gif) ](./other/gif/g.gif)
💡 **Note:**
* `gg` is the meaning of "to Global and log", has same usage as `g`, but `gg` will print the transported variable.
* if variable name exists in console before, the variable's value will be covered by new value.
#### ▶ `g()` to transport all vars that in the function to Python interactive console
[![click to restart GIF and see more clearer GIF](./other/gif/g_call.gif) ](./other/gif/g_call.gif)
💡 **Note:** `g()` is a useful tool for debug. `import boxx.g` is convenient way to use `g()` instead of `from boxx import g;g()`(`import boxx.gg` is avaliable too)
#### ▶ `with p`, `with g`, `with gg` are mulit variables version of `p`, `g`, `gg` that work under "with statement"
Only act on interested variables which is under "with statement"
[![click to restart GIF and see more clearer GIF](./other/gif/w.gif) ](./other/gif/w.gif)
💡 **Note:**
* `with p`, `with g`, `with gg` only act on assignment variables under "with statement".
* If variable's name exists in `locals()` before and `id(variable)` not change ,variable may not be detected
### Scientific Computing and Computer VisionUseful tools in **Scientific Computing** and **Computer Vision** field. All tools support array-like types, include `numpy`, `torch.tensor`, `mxnet.ndarray`, `PIL.Image` .etc
💡 **Note:** If you are using `ssh` to execute code on a remote server, it is recommended that `ssh` plus `-X` make visualized `plt` charts can be transferred to the local and display, like `ssh -x user@host`.
#### ▶ `loga` to visualization matrix and tensor
`loga` is short of "log array", `loga` will show many attributes of array-like object.
[![click to restart GIF and see more clearer GIF](./other/gif/loga.gif)](./other/gif/loga.gif)
💡 **Note:** `loga` analysis array-like object by it's shape, max, min, mean, and distribute. Support `numpy`, `torch.tensor`, `mxnet.ndarray`, `PIL.Image` .etc
#### ▶ `show` is easy to do `imshow`, even images are in complex struct
`show` could find every image in complex struct and imshow they.
[![click to restart GIF and see more clearer GIF](./other/gif/show.gif)](./other/gif/show.gif)
💡 **Note:** if args inculde function(like `torgb`). those functions will process all numpys befor imshow.
#### ▶ `tree` for visualization complex struct
like `tree` command in shell, `boxx.tree` could visualization any struct in tree struct view.
[![click to restart GIF and see more clearer GIF](./other/gif/tree.gif)](./other/gif/tree.gif)
💡 **Note:** `tree` support types include `list`, `tuple`, `dict`, `numpy`, `torch.tensor/Dataset/DataLoader`, `mxnet.ndarray`, `PIL.Image`.etc
#### ▶ `boxx` debug tool matrix
| How many vars \ Operation | print | transport | print & transport |
| :---- | :---- | :---- | :---- |
| Single variable | `p/x` | `g.name/x` | `gg.name/x`|
|Multi variables | `with p:` | `with g:` | `with gg:` |
|All `locals()`| `p()` | `g()` | `gg()` |
|All `locals()`\_2 | `import boxx.p` | `import boxx.g` | `import boxx.gg` |💡 **Note:**
* **transport** mean "transport variable to Python interactive console"
* **All `locals()`** mean operation will act on all variables in the function or module
* **All `locals()`\_2 :** when `boxx` are not imported, `import boxx.{operation}` is a convenient way to execution operation
#### ▶ `what` to know "What's this?"
[![click to restart GIF and see more clearer GIF](./other/img/what.png) ](./other/img/what.png)
💡 **Note:** `what(x)` will show "what is `x`?" by pretty print it's **Self**, **Document**, **Father Classes**, **Inner Struct** and **Attributes**. It is a supplement of `help(x)`.
#### ▶ `timeit` is convenient timing tool
[![click to restart GIF and see more clearer GIF](./other/img/timeit.png) ](./other/img/timeit.png)
💡 **Note:** `timeit` will timing code block under "with statement" and print spend time in blue color.
#### ▶ `mapmp` is Multi Process version of `map`
`mapmp` is the meaning of "MAP for Multi Process", has the same usage as `map` but faster.
[![click to restart GIF and see more clearer GIF](./other/gif/mapmp.gif) ](./other/gif/mapmp.gif)
💡 **Note:**
* **pool** parameter in `mapmp` mean the number of Process, the default is the number of CPUs in the system.
* In multi process programs, display processing progress is troublesome. **printfreq** parameter in `mapmp` can handle this problem.
* Like `map`, `mapmp` support muliti args to as input to function, like `mapmp(add, list_1, list_2)`.
* * It's better to run multi process under `__name__ == '__main__'` environment.
* If you speed up the `numpy` program, note that in the MKL version of `numpy`, multiple processes will be slower. You can run `boxx.testNumpyMultiprocessing()` to test how friendly the current environment is to a multi-process `numpy`.
#### ▶ `heatmap` to show the time heat map of your code
[![click to restart GIF and see more clearer GIF](./other/img/heatmap.png) ](./other/img/heatmap.png)
💡 **Note:** `heatmap` also support python code string.
#### ▶ `performance` could statistic function calls and visualize code performance
[![click to restart GIF and see more clearer GIF](./other/gif/performance.gif) ](./other/gif/performance.gif)
💡 **Note:** `performance` also support python code string.
---
## 5. Acknowledgments
* Thanks to Xiaodong Xu, Guodong Wu, Haoqiang Fan, Pengfei Xiong for their suggestions
* I develop **`boxx`** in [Spyder IDE](https://github.com/spyder-ide/spyder), [Spyder](https://github.com/spyder-ide/spyder) is a awesome Scientific Python Development Environment with Powerful [**Qt-IPython**](https://github.com/jupyter/qtconsole)
* `performance` is supported by [SnakeViz](https://jiffyclub.github.io/snakeviz/)
* `heatmap` is supported by [csurfer/pyheat](https://github.com/csurfer/pyheat)