# Python module for binary_c
Coverage: ![alt text](coverage.svg)
Based on a original work by Jeff Andrews (can be found in old_solution/ directory)
updated and extended for Python3 by Robert Izzard, David hendriks

## Requirements
To run this code you need to at least have installations of:
- Python3
- binary_c version 2.1+

And the following python packages (which will get installed automatically when installing with pip):
- numpy
- pytest
- h5py
- pathos
- pandas
- astropy
- matplotlib

## Environment variables
Before compilation you need to have certain environment variables:

Required:
- `BINARY_C` should point to the root directory of your binary_c installation
- `LD_LIBRARY_PATH` should include $BINARY_C/src and whatever directories are required to run binary_c (e.g. locations of libgsl, libmemoize, librinterpolate, etc.)
- `LIBRARY_PATH` should include whatever directories are required to build binary_c (e.g. locations of libgsl, libmemoize, librinterpolate, etc.)

## Build instructions
First, make sure you have built binary_c (See `$BINARY_C/doc/binary_c2.pdf` section: installation for all the installation instructions for `binary_c`)) and that it functions correctly. 

### Installation via PIP:
To install this package via pip:

```
pip install binarycpython
```

### Installation from source:
For this it is best to set up a virtual environment for this. Activate the virtualenvironment and enter the downloaded version of the repo. 

Then run
```
python setup.py clean && python setup.py build --force && python setup.py sdist && pip install --ignore-installed --no-dependencies -v dist/binarycpython-<version of this package>.tar.gz
```

This will install this package into the virtual environment. Making changes to the sourcecode can be "installed" into the virtual env with the same command. 

## Examples
See the examples/ directory for example script. The documentation contains example pages as well. 

## Usage notes
Make sure that with every change/recompilation you make in `binary_c`, you also rebuild this package. 

## Documentation
Look in the doc/ directory. Within the build/html/ there is the html version of the documentation. 

## FAQ/Issues:
Building issues with binary_c itself: 
- see the documentation of binary_c (in doc/). 
- If you have MESA installed, make sure that the `$MESASDK_ROOT/bin/mesasdk_init.sh` is not sourced. It comes with its own version of some programs, and those can interfere with installing.  

When Pip install fails:
- Run the installation with `-v` and/or `--log <logfile>` to get some more info
- If gcc throws errors like `gcc: error: unrecognized command line option ‘-ftz’; did you mean ‘-flto’?`, this might be due to that the python on that system was built with a different compiler. It then passes the python3.6-config --cflags to the binarycpython installation, which, if done with gcc, will not work. Try a different python3.6. I suggest using `pyenv` to manage python versions. If installing a version of python with pyenv is not possible, then try to use a python version that is avaible to the machine that is built with the same compiler as binary_c was built with. 
- if pip installation results in `No files/directories in /tmp/pip-1ckzg0p9-build/pip-egg-info (from PKG-INFO)`, try running it verbose (`-v`) to see what is actually going wrong. 
- If pip terminates with the error FileNotFoundError: [Errno 2] No such file or directory: '<...>/binary_c-config' Then make sure that the path to your main $BINARY_C directory is set correctly.

Other:
- When running jupyter notebooks, make sure you are running the jupyter installation from the same virtual environment. 
- When the output of binary_c seems to be different than expected, you might need to rebuild this python package. Everytime binary_c is compiled, this package needs to be rebuilt too.