# Path: Software/Raytracer/universe.py
# class Universe:
#     def __init__(self, spin=0.999, innerDiskRadius=9, outerDiskRadius=20):
#     def update(self):
#     def computeTrappedOrbits(self):
#     def _b0(self, r):
#     def computeBConstants(self):
#     def computeHorizonRadius(self):
#     def spin(self):
#     def spin(self, value):


from .universe import universe
from .Utils.logging_utils import LoggingClass
from numpy import pi as Pi
from matplotlib import pyplot as plt
from matplotlib.patches import Circle
from pycuda import driver, compiler, gpuarray
import os
import numpy as np
import mpl_toolkits.mplot3d.art3d as art3d
import jinja2
import pycuda.autoinit
        templateLoader = jinja2.FileSystemLoader(searchpath=selfDir)

        # An environment provides the data necessary to read and
        # parse our templates.  We pass in the loader object here.
        templateEnv = jinja2.Environment(loader=templateLoader)

        # Read the template file using the environment object.
        # This also constructs our Template object.
        templatePath = os.path.join('Kernel', 'common.jj')
        template = templateEnv.get_template(templatePath)

        codeType = "double"

        # Specify any input variables to the template as a dictionary.
        templateVars = {
            "IMG_ROWS": self.imageRows,
            "IMG_COLS": self.imageCols,
            "NUM_PIXELS": self.imageRows*self.imageCols,

            # Camera constants
            "D": self.camera.focalLength,
            "CAM_R": self.camera.r,
            "CAM_THETA": self.camera.theta,
            "CAM_PHI": self.camera.phi,
            "CAM_BETA": self.camera.speed,

            # Black hole constants
            "SPIN": universe.spin,
            "SPIN2": universe.spinSquared,
            "B1": universe.b1,

# Path: Software/Raytracer/universe.py
# class Universe:
#     def __init__(self, spin=0.999, innerDiskRadius=9, outerDiskRadius=20):
#     def update(self):
#     def computeTrappedOrbits(self):
#     def _b0(self, r):
#     def computeBConstants(self):
#     def computeHorizonRadius(self):
#     def spin(self):
#     def spin(self, value):


# Path: Software/Raytracer/raytracer.py
from .universe import universe
from .Utils.logging_utils import LoggingClass
from numpy import pi as Pi
from matplotlib import pyplot as plt
from matplotlib.patches import Circle
from pycuda import driver, compiler, gpuarray
import os
import numpy as np
import mpl_toolkits.mplot3d.art3d as art3d
import jinja2
import pycuda.autoinit

        templateLoader = jinja2.FileSystemLoader(searchpath=selfDir)

        # An environment provides the data necessary to read and
        # parse our templates.  We pass in the loader object here.
        templateEnv = jinja2.Environment(loader=templateLoader)

        # Read the template file using the environment object.
        # This also constructs our Template object.
        templatePath = os.path.join('Kernel', 'common.jj')
        template = templateEnv.get_template(templatePath)

        codeType = "double"

        # Specify any input variables to the template as a dictionary.
        templateVars = {
            "IMG_ROWS": self.imageRows,
            "IMG_COLS": self.imageCols,
            "NUM_PIXELS": self.imageRows*self.imageCols,

            # Camera constants
            "D": self.camera.focalLength,
            "CAM_R": self.camera.r,
            "CAM_THETA": self.camera.theta,
            "CAM_PHI": self.camera.phi,
            "CAM_BETA": self.camera.speed,

            # Black hole constants
            "SPIN": universe.spin,
            "SPIN2": universe.spinSquared,
            "B1": universe.b1,

            "B2": universe.b2,