semvec/pypi-packages huggingface dataset:
riskcontrol 0.1.33
Added the report of score

Copyright (c) 2019 The Python Packaging Authority

The package is used for risk control modeling in Python. 
It mainly provides some basic and commonly data analysis methods for partners who want to learn Python data analysis or machine learning in the Internet financial industry. 
It also contains a large number of solutions to the problems encountered by the authors in their daily work. 
I hope you can actively use it. 
If you have any questions, please contact me at hsliu_em@126.com.

![riskcontrol](https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1763145767,256938191&fm=26&gp=0.jpg)

### riskcontrol
Riskcontrol is used for risk control modeling in Python.
 
It provides intuitive tools for
- feature information-value (iv)
- plot bad rate of bins based on decision tree
- ks plot
- feature info describe for external data validation(contain missing analysis)
- CUT_BIN
- two feature heat map for cross analysis
- logistic credit card
- gps near geohash coding

#### install
```
pip install riskcontrol
```

#### Usage
```python
import riskcontrol as rc
import pandas as pd

data = pd.read_csv('test.csv')
rc.feature_miss_ana(data) # data analysis report
```
| col       | col_type | iv     | ...  | mode_v | mode_pect | mode_bad_rate | risk_monotonicity |
| --------- | -------- | ------ | ---- | ------ | --------- | ------------- | ----------------- |
| ios       | float64  | 0.0273 | ...  | 0      | 0.528996  | 0.054911      | 强                |
| sex_m     | float64  | 0.0486 | ...  | 1      | 0.723311  | 0.053726      | 强                |
| age     | float64  | 0.0408 | ...  | 22     | 0.095423  | 0.053391      | 弱                |
| income  | float64  | 0.0302 | ...  | 100000 | 0.147488  | 0.041681      | 弱                |
| edu       | float64  | 0.0367 | ...  | 0      | 0.828286  | 0.051514      | 强                |
| freeram | float64  | 0.0087 | ...  | 482864 | 0.000104  | 0.125         | 无                |
| joblevel  | float64  | 0.0411 | ...  | 4      | 0.383198  | 0.056743      | 强                |

- miss_bad_rate:缺失值对应的bad_rate
- notnull_bad_rate：非缺失值对应的bad_rate
- zero_pect：0值占比
- zero_bad_rate：0值bad_rate
- mode_v：众数
- mode_pect：众数占比
- mode_bad_rate：众数对应的bad_rate
- risk_monotonicity：分箱后的逾期单调性


```python
rc.split_box_plot_new(data, col_name) # bins bad rate plot
```
![决策树分箱后的表现](https://upload-images.jianshu.io/upload_images/15469714-4802ff24951c64b7.png)


```python
rc.create_geohash(latitude, longitude, radius, precision)
```
![GPS附近点位](https://upload-images.jianshu.io/upload_images/15469714-c0d77ed8d427da4a.png)
polytest 0.0.4
Wrapper for Polymatica API
Keywords: polymatica

# polymatica-python

Первым шагом необходимо импортировать модуль бизнес-логики командой

```from polymatica import business_scenarios as sc```

Далее нужно нициализировать класс бизнес-логики.
Если импользуется механизм беспарольной авторизации, то password указывать не нужно.

```sc = sc.BusinessLogic(login="your_login", password="your_password" url="base poly server url")```

Скрипты запускаются при помощи команды функций, лежащих в файле business_scenarios.py

Функции в модуле business_scenarios можно посмотреть при помощи стандартной функции Python: dir()

Аргументы функций, их смысл, а также прочую docstring-документацию модуля и функций можно посмотреть при помощи стандартной функции Python: help()

В модуле business_scenarios есть функции execute_olap_command() и execute_manager_command().
execute_olap_command() должна запускать все команды модуля Olap,
execute_manager_command() должна запускать все команды модуля Manager.

# нагрузочное тестирование и тестирование производительности
Первым шагом положить файл ```pick_metrics.py``` (папка ```performance_testing```) на сервер, который будет нагружаться.
На сервере сделать файл исполняемым командой ```chmod a+x pick_metrics.py```.
После чего запустить файл командой ```./pick_metrics.py 60```, где ```60``` - 
количество минут, в течение которых скрипт будет собирать метрики (% загрузки CPU и RAM).
Последний шаг можно также сделать с локальной машины.

**Локально:**

В папке ```performance_testing``` отредактировать файл ```config.ini```.

Для пользователей Linux: запустить файл ```performance_master.sh``` (для Windows: ```performance_master.sh```),
который запустит locust,
запустит скрипт ```pick_metrics.py```,
запустит скрипты, которые будут с периодичностью 10 секунд забирать отчеты с сервера и строить по ним график.

В браузере запустить веб-морду locust ```http://localhost:8089/```.
В веб-морде указать количество пользователей для нагрузочного тестирования,
количество новых пользователей/сек и хост.

Во время нагрузочного тестирования весь поток вывода и поток ошибок пишется в ```/polymatica/logs/performance_tests.log```

Change Log
==========

0.0.1 (01/12/2020)
------------------
- First Release

0.0.2 (01/12/2020)
------------------
- Fix unicode letters
omfit-xml 2020.12.2.22.59
omfit_xml
Requires Python: >=3.6

**XML** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITxml

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITxml
--------

    OMFIT class used to interface with XML input files

    :param filename: filename passed to OMFITascii class

    :param \**kw: keyword dictionary passed to OMFITascii class
omfit-uedge 2020.12.2.22.59
omfit_uedge
Requires Python: >=3.6

**UEDGE** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITuedge
* uedge_variable
* uedge_common_mapper
* uedge_common_map_generator
* OMFITuedgeBasisInput
* OMFITuedgeInput

Requires:
=========
* matplotlib>=3.1,!=3.2.1,!=3.2.2
* numpy>=1.12
* omas>=0.67.0
* scipy>=1.0
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_hdf5==2020.12.2.22.59
* omfit_json==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITuedge
----------
N/A

uedge_variable
--------------

    class used to distinguish between strings and uedge variables in the PyUEDGE input deck
    

uedge_common_mapper
-------------------

    Parses the uedge_common_map.json and caches it for later use

    :param var: either variable name or None

    :return: mapper if var is None else mapping info for var
    

uedge_common_map_generator
--------------------------

    Parse the bbb.v com.v flx.v grd.v files and generate mapper for common blocks

    This is useful because the BASIS version of UEDGE used not
    to require specifying the common blocks for variables.
    Transition to PyUEDGE requires people to add the common block
    information to the old input files.

    To translate old UEDGE files to the new PyUEDGE format use:
    >> OMFITuedgeBasisInput('old_uedge_input.txt').convert()

    :param uedge_dir: folder where UEDGE is installed

    :return: OMFITjson object containing with mapping info
    

OMFITuedgeBasisInput
--------------------

    Class used to parse input files from BASIS version of UEDGE

    To translate old UEDGE files to the new PyUEDGE format use:
    >> OMFITuedgeBasisInput('old_uedge_input.txt').convert()
    

OMFITuedgeInput
---------------

    Class used to parse input files of Python version of UEDGE
omfit-uda 2020.12.2.22.59
omfit_uda
Requires Python: >=3.6

**UDA** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITudaValue
* OMFITudaConnections

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITudaValue
-------------

    A wrapper for pyuda calls that behaves like OMFITmdsValue
    

OMFITudaConnections
-------------------
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
    (key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
    d = {}
    for k, v in iterable:
        d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
    in the keyword argument list.  For example:  dict(one=1, two=2)
omfit-tsc 2020.12.2.22.59
omfit_tsc
Requires Python: >=3.6

**TSC** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITtsc

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITtsc
--------

    OMFIT class used to interface with TSC input files

    :param filename: filename passed to OMFITascii class

    :param \**kw: keyword dictionary passed to OMFITascii class
omfit-trip3d 2020.12.2.22.59
omfit_trip3d
Requires Python: >=3.6

**TRIP3D** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITtrip3Dcoil
* OMFITtrip3Dlines
* OMFITtrip3Dhits
* OMFITtrip3Dstart
* OMFITtrip3Dprobeg

Requires:
=========
* fortranformat>=0.2
* matplotlib>=3.1,!=3.2.1,!=3.2.2
* numpy>=1.12
* omas>=0.67.0
* scipy>=1.0
* uncertainties>=3
* xarray>=0.10.8
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_matrix==2020.12.2.22.59
* omfit_eqdsk==2020.12.2.22.59
* omfit_nc==2020.12.2.22.59
* omfit_namelist==2020.12.2.22.59
* omfit_mds==2020.12.2.22.59
* omfit_data==2020.12.2.22.59
* omfit_error==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITtrip3Dcoil
---------------
N/A

OMFITtrip3Dlines
----------------

    The OMFITtrip3Dlines class parses and handles the TRIP3D 'lines.out' output file.
    A self-described xarray object is stored under self['data'].
    

OMFITtrip3Dhits
---------------

    The OMFITtrip3Dhits class parses and handles the TRIP3D 'hit.out' output file.
    A self-described xarray object is stored under self['data'].
    

OMFITtrip3Dstart
----------------

    The OMFITtrip3Dstart class parses and handles the TRIP3D start points input file.
    A self-described xarray object is stored under self['data'].
    

OMFITtrip3Dprobeg
-----------------

    The OMFITtrip3Dprobeg class parses and handles the TRIP3D 'probe_gb.out' output file.
    A self-described xarray object is stored under self['data'].
omfit-ufile 2020.12.2.22.59
omfit_ufile
Requires Python: >=3.6

**UFILE** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITuFile

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITuFile
----------

    Class used to interface with TRANSP U-files

    :param filename: filename passed to OMFITobject class

    :param \**kw: keyword dictionary passed to OMFITobject class
omfit-toq 2020.12.2.22.59
omfit_toq
Requires Python: >=3.6

**TOQ** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITtoqProfiles
* OMFITdskeqdata

Requires:
=========
* fortranformat>=0.2
* numpy>=1.12
* omas>=0.67.0
* scipy>=1.0
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_gato==2020.12.2.22.59
* omfit_json==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITtoqProfiles
----------------
TOQ profiles data files

OMFITdskeqdata
--------------

    OMFIT class used to interface to equilibria files generated by TOQ (dskeqdata files)

    :param filename: filename passed to OMFITobject class

    :param \**kw: keyword dictionary passed to OMFITobject class
omfit-timcon 2020.12.2.22.59
omfit_timcon
Requires Python: >=3.6

**TIMCON** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITtimcon

Requires:
=========
* numpy>=1.12
* scipy>=1.0
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITtimcon
-----------

    OMFIT class for parsing/writing the NBI time traces of the DIII-D PCS
omfit-thomson 2020.12.2.22.59
omfit_thomson
Requires Python: >=3.6

**THOMSON** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITthomson

Requires:
=========
* fortranformat>=0.2
* matplotlib>=3.1,!=3.2.1,!=3.2.2
* numpy>=1.12
* omas>=0.67.0
* pyyaml>=3.13
* requests>=2.20
* scipy>=1.0
* uncertainties>=3
* xarray>=0.10.8
* omfit_error==2020.12.2.22.59
* omfit_elm==2020.12.2.22.59
* omfit_mds==2020.12.2.22.59
* omfit_data==2020.12.2.22.59
* omfit_rdb==2020.12.2.22.59
* omfit_testing==2020.12.2.22.59
* omfit_github==2020.12.2.22.59
* omfit_eqdsk==2020.12.2.22.59
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_nc==2020.12.2.22.59
* omfit_namelist==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITthomson
------------

    Helps with fetching data from the Thomson Scattering diagnostic.

    It also has some other handy features to support analysis based on Thomson data:

    - Filter data by fractional error (e.g. throw out anything with > 10% uncertainty)
    - Filter data by reduced chi squared (e.g. throw out anything with redchisq > 8)
    - Filter data using ELM timing (e.g. only accept data if they are sampled between 50 and 99% of their local
      inter-ELM period)
omfit-strahl 2020.12.2.22.59
omfit_strahl
Requires Python: >=3.6

**STRAHL** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITstrahl

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITstrahl
-----------

    OMFIT class used to interface with STRAHL input files

    :param filename: filename passed to OMFITobject class

    :param \**kw: keyword dictionary passed to OMFITobject class
omfit-spider 2020.12.2.22.59
omfit_spider
Requires Python: >=3.6

**SPIDER** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITspider_bonfit

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITspider_bonfit
------------------

    OMFIT class used to interface with SPIDER equilibirum bonfit (boundary fit) input file

    :param filename: filename passed to OMFITascii class

    :param \**kw: keyword dictionary passed to OMFITascii class
omfit-solps 2020.12.2.22.59
omfit_solps
Requires Python: >=3.6

**SOLPS** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* find_closest_key
* OMFITsolps
* OMFITsolpsNamelist
* OMFITsolpsCase

Requires:
=========
* matplotlib>=3.1,!=3.2.1,!=3.2.2
* numpy>=1.12
* pyyaml>=3.13
* requests>=2.20
* uncertainties>=3
* xarray>=0.10.8
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_namelist==2020.12.2.22.59
* omfit_base==2020.12.2.22.59
* omfit_testing==2020.12.2.22.59
* omfit_github==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
find_closest_key
----------------

    Decides which string in a list of strings (like a list of dictionary keys) best matches a search string. This is
    provided so that subtle changes in the spelling, arrangement, or sanitization of headers in input.dat don't break
    the interface.

    :param keys: List of keys which are potential matches to test_key

    :param search_string: String to search for; it should be similar to an expected key name in keys.

    :param block_id: A string with the block number, like '1' or '3a'. If this is provided, the standard approximate
        block name will be used and search_string is not needed.

    :param case_sensitive: T/F: If False, strings will have output of .upper() compared instead of direct comparison.

    :return: A string containing the key name which is the closest match to search_string
    

OMFITsolps
----------

    Class for parsing some OMFIT input files
    

OMFITsolpsNamelist
------------------

    Special namelist class for SOLPS files.

    - Launches a custom GUI in SOLPS module.
    - Fixes the dimensions of b2.boundary.parameters arrays by setting up collect_arrays() instructions
      (only if collect_arrays keyword is not already specified)
    

OMFITsolpsCase
--------------

    Class for holding SOLPS runs

    Key methods:
    ------------
    - inputs: returns a list of file references for building an input deck. Includes current run and common_folder.

    - check_inputs: returns a list of missing files in the input deck
omfit-slack 2020.12.2.22.59
omfit_slack
Requires Python: >=3.6

**SLACK** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* _get_omfit_slack_credential
* get_omfit_slack_token
* set_omfit_slack_token
* post_to_slack

Requires:
=========
* numpy>=1.12
* requests>=2.20
* uncertainties>=3
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
_get_omfit_slack_credential
---------------------------
N/A

get_omfit_slack_token
---------------------

    Gets slack token
    :param token: string
        token string. if None, read from encrypted credential file.
    :return: string
        Potentially valid slack token
        If it fails, a ValueError is raised
    

set_omfit_slack_token
---------------------

    Encrypts a slack token and saves it so it can be obtained by get_omfit_slack_token
    :param token: string
        token string to be saved in encrypted form.
    

post_to_slack
-------------

    Posts slack messages
    :param message: string
        Message body to be posted
    :param channel: string
        Channel identifier, like auto_test_reports
    :return: response instance
        As generated by requests. It should have a `status_code` attribute, which is normally int(200) for successful
        slack posts and probably 4xx for failures.
omfit-reviewplus 2020.12.2.22.59
omfit_reviewplus
Requires Python: >=3.6

**REVIEWPLUS** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITreviewplus

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITreviewplus
---------------
N/A
omfit-rabbit 2020.12.2.22.59
omfit_rabbit
Requires Python: >=3.6

**RABBIT** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITrabbitEq
* OMFITrabbitBeamout
* OMFITrabbitTimetraces
* OMFITrabbitBeamin

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITrabbitEq
-------------
Equilibirium files for RABBIT

OMFITrabbitBeamout
------------------
Beam output files from RABBIT

OMFITrabbitTimetraces
---------------------
Timetraces input file for RABBIT

OMFITrabbitBeamin
-----------------
Beam input file for RABBIT
omfit-profiles 2020.12.2.22.59
omfit_profiles
Requires Python: >=3.6

**PROFILES** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITprofiles
* OMFITprofilesDynamic

Requires:
=========
* fortranformat>=0.2
* matplotlib>=3.1,!=3.2.1,!=3.2.2
* numpy>=1.12
* omas>=0.67.0
* scipy>=1.0
* uncertainties>=3
* xarray>=0.10.8
* omfit_data==2020.12.2.22.59
* omfit_omas_utils==2020.12.2.22.59
* omfit_mds==2020.12.2.22.59
* omfit_eqdsk==2020.12.2.22.59
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_nc==2020.12.2.22.59
* omfit_namelist==2020.12.2.22.59
* omfit_error==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITprofiles
-------------
N/A

OMFITprofilesDynamic
--------------------

    Class for dynamic calculation of derived quantities

    :Examples:

    Initialize the class with a filename and FIT Dataset.

    >>> tmp=OMFITprofiles('test.nc', fits=root['OUTPUTS']['FIT'], equilibrium=root['OUTPUTS']['SLICE']['EQ'], root['SETTINGS']['EXPERIMENT']['gas'])

    Accessing a quantity will dynamically calculate it.

    >>> print tmp['Zeff']

    Quantities are then stored (they are not calculated twice).


    >>> tmp=OMFITprofiles('test.nc',
                          fits=root['OUTPUTS']['FIT'],
                          equilibrium=root['OUTPUTS']['SLICE']['EQ'],
                          main_ion='2H1')
    >>> uband(tmp['rho'],tmp['n_2H1'])
omfit-pdb 2020.12.2.22.59
omfit_pdb
Requires Python: >=3.6

**PDB** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITpdb

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_error==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITpdb
--------
N/A
omfit-patch 2020.12.2.22.59
omfit_patch
Requires Python: >=3.6

**PATCH** files used as part of the OMFIT project: https://omfit.io/

Provides:
=========
* OMFITpatch
* OMFITpatchObject
* OMFITpatchList

Requires:
=========
* numpy>=1.12
* uncertainties>=3
* omfit_ascii==2020.12.2.22.59
* omfit_path==2020.12.2.22.59
* omfit_commonclasses==2020.12.2.22.59

Authors:
=========
https://omfit.io/contributors.html

Documentation:
==============
OMFITpatch
----------

    Parses DIII-D PCS patch panel files.

    Several types of files are recognized:
    - Type-F: F-coil patch panel in ASCII archival format.
    - Type-P: F-coil patch panel in binary format. Can be converted to type-F by
      changing .patch_type attribute and executing .add_c_coil() method. May be obsolete.
    - Type-I: I&C coil patch panel in ASCII format.

    

OMFITpatchObject
----------------

    Handles objects within a patch panel (such as a single F coil) and keeps indices & names consistent with each other
    

OMFITpatchList
--------------

    Handles list-like data within patch panels.

    __setitem__ notifies parent object of new assignment so values index/name pairs can be kept self consistent.
    Without this intervention, a list's element can be changed without changing the list itself and so the parent
    OMFITpatchObject instance gets no notification, and lists of chopper indices and chopper names can get out of sync.