# Python - Custom Graph Library


## Description
A custom implementation of a graph data structure. Setup as a library for other projects to import.

For information on importing the library as a "git submodule", see `documents/git_submodules.md`.


## Python Environment
This project is tested using Python3.7.
Written using PyCharm. Tested with Pycharm 2017.2.3 and 2019.2 versions.

### Creating a New Env
Most installations of Python3 will allow you to simply run `python3.7 -m venv ./.venv` to create a new Python3.7
environment called ".venv" at the current directory folder.

Once created, load this environment with `source .venv/bin/activate` on Linux or `. .venv/Scripts/activate` on Windows.

### Third Party Libraries
* If any additional libraries have been used, then they will be found in `requrements.txt` at the project root.
* To install, load your local Python Environment and run `pip install -r requirements.txt` when at the project root.


## Running the Program
Run the program via `python ./main.py` while at the project root.

### Expected Output
Since this is a library, running main only gives example uses.
<br>
Running main will give 3 options:
1) Run a few graph functions and print graph output to console.
2) Dynamically generate a few graphs and use the "plotly" library to visually map them.<br>
    (Note that this will open up browser tabs, as that seems to be how plotly renders visuals. As far as I can tell, I
    don't have control over this.)
3) Run through every single graph function in every single custom class within this library.<br>
    This option is admittedly a little bit hard to follow/read. But I'm not sure how else I was supposed to meet the
    below requirement:

    `"Also, you will demonstrate your code. Write a script that builds a graph using your Graph library and demonstrate
    the use of your methods that implement the functions listed above."`


## Running Tests
To run all unittests for this project, open a terminal and run the `run_unit_tests.sh` bash script.

For more information about testing, see the `documents/testing.md` file.


## References
See the `documents/references.md` file.