From 3be5c54d2672c53e96d6ba2608e2144375c975ab Mon Sep 17 00:00:00 2001
From: Alec Helbling <alechelbling@gatech.edu>
Date: Mon, 28 Mar 2022 14:01:00 -0400
Subject: [PATCH] Changed directory structure to accomodate examples as apposed
 to everything being a part of the core library. May need to rethink this in
 the future. Added some boilerplate for pip packaging to the .gitignore.

---
 .gitignore                                          |   9 ++++++++-
 Readme.md                                           |   8 ++++----
 .../disentanglement}/disentanglement.py             |  11 +++++++----
 {src => examples/interpolation}/interpolation.py    |   4 ++--
 examples/{ => media}/DisentanglementScene.gif       | Bin
 examples/{ => media}/DisentanglementScene.mp4       | Bin
 examples/{ => media}/ManimMLLogo.gif                | Bin
 examples/{ => media}/NNImage.png                    | Bin
 examples/{ => media}/TestNeuralNetworkScene.gif     | Bin
 examples/{ => media}/TestNeuralNetworkScene.mp4     | Bin
 examples/{ => media}/VAEImage.png                   | Bin
 examples/{ => media}/VAEScene.gif                   | Bin
 examples/{ => media}/VAEScene.mp4                   | Bin
 .../autoencoder_models/.DS_Store                    | Bin
 .../autoencoder_models}/__init__.py                 |   0
 .../data/MNIST/raw/t10k-images-idx3-ubyte           | Bin
 .../data/MNIST/raw/t10k-images-idx3-ubyte.gz        | Bin
 .../data/MNIST/raw/t10k-labels-idx1-ubyte           | Bin
 .../data/MNIST/raw/t10k-labels-idx1-ubyte.gz        | Bin
 .../data/MNIST/raw/train-images-idx3-ubyte          | Bin
 .../data/MNIST/raw/train-images-idx3-ubyte.gz       | Bin
 .../data/MNIST/raw/train-labels-idx1-ubyte          | Bin
 .../data/MNIST/raw/train-labels-idx1-ubyte.gz       | Bin
 .../autoencoder_models/disentanglement.pkl          | Bin
 .../autoencoder_models/generate_disentanglement.py  |   0
 .../autoencoder_models/generate_images.py           |   0
 .../autoencoder_models/generate_interpolation.py    |   0
 .../autoencoder_models/image_pairs.pkl              | Bin
 .../autoencoder_models/interpolations.pkl           | Bin
 .../autoencoder_models/saved_models/model_dim16.pth | Bin
 .../autoencoder_models/saved_models/model_dim2.pth  | Bin
 .../saved_models/model_dim2_cnn.pth                 | Bin
 .../autoencoder_models/saved_models/model_dim5.pth  | Bin
 .../autoencoder_models/variational_autoencoder.py   |   7 ++++++-
 .../variational_autoencoder.py                      |   6 +++---
 {src/autoencoder_models => manim_ml}/__init__.py    |   0
 {src => manim_ml}/logo.py                           |   0
 {src => manim_ml}/neural_network.py                 |   0
 {src => manim_ml}/probability_embedding.py          |   0
 {src => manim_ml}/util.py                           |   0
 40 files changed, 30 insertions(+), 15 deletions(-)
 rename {src => examples/disentanglement}/disentanglement.py (86%)
 rename {src => examples/interpolation}/interpolation.py (93%)
 rename examples/{ => media}/DisentanglementScene.gif (100%)
 rename examples/{ => media}/DisentanglementScene.mp4 (100%)
 rename examples/{ => media}/ManimMLLogo.gif (100%)
 rename examples/{ => media}/NNImage.png (100%)
 rename examples/{ => media}/TestNeuralNetworkScene.gif (100%)
 rename examples/{ => media}/TestNeuralNetworkScene.mp4 (100%)
 rename examples/{ => media}/VAEImage.png (100%)
 rename examples/{ => media}/VAEScene.gif (100%)
 rename examples/{ => media}/VAEScene.mp4 (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/.DS_Store (100%)
 rename {src => examples/variational_autoencoder/autoencoder_models}/__init__.py (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/disentanglement.pkl (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/generate_disentanglement.py (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/generate_images.py (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/generate_interpolation.py (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/image_pairs.pkl (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/interpolations.pkl (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim16.pth (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim2.pth (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim2_cnn.pth (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/saved_models/model_dim5.pth (100%)
 rename {src => examples/variational_autoencoder}/autoencoder_models/variational_autoencoder.py (97%)
 rename {src => examples/variational_autoencoder}/variational_autoencoder.py (98%)
 rename {src/autoencoder_models => manim_ml}/__init__.py (100%)
 rename {src => manim_ml}/logo.py (100%)
 rename {src => manim_ml}/neural_network.py (100%)
 rename {src => manim_ml}/probability_embedding.py (100%)
 rename {src => manim_ml}/util.py (100%)

diff --git a/.gitignore b/.gitignore
index 6d38729..0bfd98c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,9 @@
+__pycache__
+manim_ml.egg-info/
+manim_ml/manim_ml.egg-info/
+dist
+manim_ml/media
 media
-__pycache__
\ No newline at end of file
+pyproject.toml
+setup.cfg
+!examples/media
\ No newline at end of file
diff --git a/Readme.md b/Readme.md
index b800299..425de04 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,6 +1,6 @@
 # Manim Machine Learning
 <a href="https://github.com/helblazer811/ManimMachineLearning">
-    <img src="examples/ManimMLLogo.gif">
+    <img src="examples/media/ManimMLLogo.gif">
 </a>
 
 [![GitHub license](https://img.shields.io/github/license/helblazer811/ManimMachineLearning)](https://github.com/helblazer811/ManimMachineLearning/blob/main/LICENSE.md)
@@ -28,16 +28,16 @@ Checkout the ```examples``` directory for some example videos with source code.
 
 This is a visualization of a Variational Autoencoder. 
 
-<img src="examples/VAEScene.gif" width="600">
+<img src="examples/media/VAEScene.gif" width="600">
 
 ### VAE Disentanglement 
 
 This is a visualization of disentanglement with a Variational Autoencoder
 
-<img src="examples/DisentanglementScene.gif" width="600">
+<img src="examples/media/DisentanglementScene.gif" width="600">
 
 ### Neural Networks
 
 This is a visualization of a Neural Network. 
 
-<img src="examples/TestNeuralNetworkScene.gif" width="600">
+<img src="examples/media/TestNeuralNetworkScene.gif" width="600">
diff --git a/src/disentanglement.py b/examples/disentanglement/disentanglement.py
similarity index 86%
rename from src/disentanglement.py
rename to examples/disentanglement/disentanglement.py
index db72353..4aea487 100644
--- a/src/disentanglement.py
+++ b/examples/disentanglement/disentanglement.py
@@ -1,7 +1,10 @@
 """This module is dedicated to visualizing VAE disentanglement"""
+import sys
+import os
+sys.path.append(os.environ["PROJECT_ROOT"])
 from manim import *
-from neural_network import NeuralNetwork
-import util
+from manim_ml.neural_network import NeuralNetwork
+import manim_ml.util as util
 import pickle
 
 class VAEDecoder(VGroup):
@@ -19,11 +22,11 @@ class VAEDecoder(VGroup):
 
 class DisentanglementVisualization(VGroup):
 
-    def __init__(self, model_path="autoencoder_models/saved_models/model_dim2.pth", image_height=0.35):
+    def __init__(self, model_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth"), image_height=0.35):
         self.model_path = model_path
         self.image_height = image_height
         # Load disentanglement image objects
-        with open("autoencoder_models/disentanglement.pkl", "rb") as f:
+        with open(os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/disentanglement.pkl"), "rb") as f:
             self.image_handler = pickle.load(f)
 
     def make_disentanglement_generation_animation(self):
diff --git a/src/interpolation.py b/examples/interpolation/interpolation.py
similarity index 93%
rename from src/interpolation.py
rename to examples/interpolation/interpolation.py
index 2e11028..9928e87 100644
--- a/src/interpolation.py
+++ b/examples/interpolation/interpolation.py
@@ -6,8 +6,8 @@ sys.path.append(os.environ["PROJECT_ROOT"])
 from manim import *
 import pickle
 import numpy as np
-import neural_network
-import variational_autoencoder
+import manim_ml.neural_network as neural_network
+import examples.variational_autoencoder.variational_autoencoder as variational_autoencoder
 
 """
     The VAE Scene for the twitter video. 
diff --git a/examples/DisentanglementScene.gif b/examples/media/DisentanglementScene.gif
similarity index 100%
rename from examples/DisentanglementScene.gif
rename to examples/media/DisentanglementScene.gif
diff --git a/examples/DisentanglementScene.mp4 b/examples/media/DisentanglementScene.mp4
similarity index 100%
rename from examples/DisentanglementScene.mp4
rename to examples/media/DisentanglementScene.mp4
diff --git a/examples/ManimMLLogo.gif b/examples/media/ManimMLLogo.gif
similarity index 100%
rename from examples/ManimMLLogo.gif
rename to examples/media/ManimMLLogo.gif
diff --git a/examples/NNImage.png b/examples/media/NNImage.png
similarity index 100%
rename from examples/NNImage.png
rename to examples/media/NNImage.png
diff --git a/examples/TestNeuralNetworkScene.gif b/examples/media/TestNeuralNetworkScene.gif
similarity index 100%
rename from examples/TestNeuralNetworkScene.gif
rename to examples/media/TestNeuralNetworkScene.gif
diff --git a/examples/TestNeuralNetworkScene.mp4 b/examples/media/TestNeuralNetworkScene.mp4
similarity index 100%
rename from examples/TestNeuralNetworkScene.mp4
rename to examples/media/TestNeuralNetworkScene.mp4
diff --git a/examples/VAEImage.png b/examples/media/VAEImage.png
similarity index 100%
rename from examples/VAEImage.png
rename to examples/media/VAEImage.png
diff --git a/examples/VAEScene.gif b/examples/media/VAEScene.gif
similarity index 100%
rename from examples/VAEScene.gif
rename to examples/media/VAEScene.gif
diff --git a/examples/VAEScene.mp4 b/examples/media/VAEScene.mp4
similarity index 100%
rename from examples/VAEScene.mp4
rename to examples/media/VAEScene.mp4
diff --git a/src/autoencoder_models/.DS_Store b/examples/variational_autoencoder/autoencoder_models/.DS_Store
similarity index 100%
rename from src/autoencoder_models/.DS_Store
rename to examples/variational_autoencoder/autoencoder_models/.DS_Store
diff --git a/src/__init__.py b/examples/variational_autoencoder/autoencoder_models/__init__.py
similarity index 100%
rename from src/__init__.py
rename to examples/variational_autoencoder/autoencoder_models/__init__.py
diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte
diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-images-idx3-ubyte.gz
diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte
diff --git a/src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/t10k-labels-idx1-ubyte.gz
diff --git a/src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte
diff --git a/src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-images-idx3-ubyte.gz
diff --git a/src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte
diff --git a/src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz b/examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz
similarity index 100%
rename from src/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz
rename to examples/variational_autoencoder/autoencoder_models/data/MNIST/raw/train-labels-idx1-ubyte.gz
diff --git a/src/autoencoder_models/disentanglement.pkl b/examples/variational_autoencoder/autoencoder_models/disentanglement.pkl
similarity index 100%
rename from src/autoencoder_models/disentanglement.pkl
rename to examples/variational_autoencoder/autoencoder_models/disentanglement.pkl
diff --git a/src/autoencoder_models/generate_disentanglement.py b/examples/variational_autoencoder/autoencoder_models/generate_disentanglement.py
similarity index 100%
rename from src/autoencoder_models/generate_disentanglement.py
rename to examples/variational_autoencoder/autoencoder_models/generate_disentanglement.py
diff --git a/src/autoencoder_models/generate_images.py b/examples/variational_autoencoder/autoencoder_models/generate_images.py
similarity index 100%
rename from src/autoencoder_models/generate_images.py
rename to examples/variational_autoencoder/autoencoder_models/generate_images.py
diff --git a/src/autoencoder_models/generate_interpolation.py b/examples/variational_autoencoder/autoencoder_models/generate_interpolation.py
similarity index 100%
rename from src/autoencoder_models/generate_interpolation.py
rename to examples/variational_autoencoder/autoencoder_models/generate_interpolation.py
diff --git a/src/autoencoder_models/image_pairs.pkl b/examples/variational_autoencoder/autoencoder_models/image_pairs.pkl
similarity index 100%
rename from src/autoencoder_models/image_pairs.pkl
rename to examples/variational_autoencoder/autoencoder_models/image_pairs.pkl
diff --git a/src/autoencoder_models/interpolations.pkl b/examples/variational_autoencoder/autoencoder_models/interpolations.pkl
similarity index 100%
rename from src/autoencoder_models/interpolations.pkl
rename to examples/variational_autoencoder/autoencoder_models/interpolations.pkl
diff --git a/src/autoencoder_models/saved_models/model_dim16.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim16.pth
similarity index 100%
rename from src/autoencoder_models/saved_models/model_dim16.pth
rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim16.pth
diff --git a/src/autoencoder_models/saved_models/model_dim2.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth
similarity index 100%
rename from src/autoencoder_models/saved_models/model_dim2.pth
rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2.pth
diff --git a/src/autoencoder_models/saved_models/model_dim2_cnn.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2_cnn.pth
similarity index 100%
rename from src/autoencoder_models/saved_models/model_dim2_cnn.pth
rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim2_cnn.pth
diff --git a/src/autoencoder_models/saved_models/model_dim5.pth b/examples/variational_autoencoder/autoencoder_models/saved_models/model_dim5.pth
similarity index 100%
rename from src/autoencoder_models/saved_models/model_dim5.pth
rename to examples/variational_autoencoder/autoencoder_models/saved_models/model_dim5.pth
diff --git a/src/autoencoder_models/variational_autoencoder.py b/examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py
similarity index 97%
rename from src/autoencoder_models/variational_autoencoder.py
rename to examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py
index 229acd2..a3363c7 100644
--- a/src/autoencoder_models/variational_autoencoder.py
+++ b/examples/variational_autoencoder/autoencoder_models/variational_autoencoder.py
@@ -198,7 +198,12 @@ def train_model(latent_dim=16, plot=True, digit=1, epochs=200):
             losses.append(loss.detach().cpu())
             outputs.append((epochs, image, reconstructed))
 
-    torch.save(model.state_dict(), os.path.join(os.environ["PROJECT_ROOT"], f"saved_models/model_dim{latent_dim}.pth"))
+    torch.save(model.state_dict(), 
+        os.path.join(
+            os.environ["PROJECT_ROOT"], 
+            f"examples/variational_autoencoder/autoencoder_model/saved_models/model_dim{latent_dim}.pth"
+        )
+    )
 
     if plot:
         # Defining the Plot Style
diff --git a/src/variational_autoencoder.py b/examples/variational_autoencoder/variational_autoencoder.py
similarity index 98%
rename from src/variational_autoencoder.py
rename to examples/variational_autoencoder/variational_autoencoder.py
index d6b4fb2..6322150 100644
--- a/src/variational_autoencoder.py
+++ b/examples/variational_autoencoder/variational_autoencoder.py
@@ -8,7 +8,7 @@ from manim import *
 import pickle
 import numpy as np
 import os
-import neural_network
+import manim_ml.neural_network as neural_network
 
 class VariationalAutoencoder(VGroup):
     """Variational Autoencoder Manim Visualization"""
@@ -244,8 +244,8 @@ class MNISTImageHandler():
 
     def __init__(
         self, 
-        image_pairs_file_path=os.path.join(os.environ["PROJECT_ROOT"], "autoencoder_models/image_pairs.pkl"), 
-        interpolations_file_path=os.path.join(os.environ["PROJECT_ROOT"], "autoencoder_models/interpolations.pkl")
+        image_pairs_file_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/image_pairs.pkl"), 
+        interpolations_file_path=os.path.join(os.environ["PROJECT_ROOT"], "examples/variational_autoencoder/autoencoder_models/interpolations.pkl")
     ):
         self.image_pairs_file_path = image_pairs_file_path
         self.interpolations_file_path = interpolations_file_path
diff --git a/src/autoencoder_models/__init__.py b/manim_ml/__init__.py
similarity index 100%
rename from src/autoencoder_models/__init__.py
rename to manim_ml/__init__.py
diff --git a/src/logo.py b/manim_ml/logo.py
similarity index 100%
rename from src/logo.py
rename to manim_ml/logo.py
diff --git a/src/neural_network.py b/manim_ml/neural_network.py
similarity index 100%
rename from src/neural_network.py
rename to manim_ml/neural_network.py
diff --git a/src/probability_embedding.py b/manim_ml/probability_embedding.py
similarity index 100%
rename from src/probability_embedding.py
rename to manim_ml/probability_embedding.py
diff --git a/src/util.py b/manim_ml/util.py
similarity index 100%
rename from src/util.py
rename to manim_ml/util.py