diff --git a/raytracing/axicon.py b/raytracing/axicon.py
index 4bf6013..680a686 100644
--- a/raytracing/axicon.py
+++ b/raytracing/axicon.py
@@ -2,130 +2,170 @@ from .matrix import *
 import matplotlib.pyplot as plt
 
 
-
 class Axicon(Matrix):
-	"""
-	This class is an advanced module that describes an axicon lens, not part of the basic formalism.
-	Using this class an axicon conical lens can be presented.
-	Axicon lenses are used to obtain a line focus instead of a point.
-
-	Parameters
-	----------
-	alpha : float
-		alpha is the small angle in radians of the axicon
-		(typically 2.5 or 5 degrees) corresponding to 90-apex angle
-	n : float
-		index of refraction.
-		This value cannot be less than 1.0.
-	diameter : float
-		Aperture of the element. (default = +Inf)
-		The diameter of the aperture must be a positive value.
-	label : string
-		The label of the axicon lens.
-
-	"""
-
-	def __init__(self, alpha, n, diameter=float('+Inf'), label=''):	
-
-		self.n = n
-		self.alpha = alpha
-		super(Axicon, self).__init__(A=1, B=0, C=0,D=1, physicalLength=0, apertureDiameter=diameter, label=label)
-
-	def deviationAngle(self):
-		""" This function provides deviation angle delta
-
-		Returns
-		-------
-		delta : float
-			the deviation angle
-
-		See ALso
-		--------
-		https://ru.b-ok2.org/book/2482970/9062b7, p.48
-
-		"""
-
-		return (self.n-1.0)*self.alpha
-
-
-	def focalLineLength(self, yMax=None):
-		""" Provides the line length, assuming a ray at height yMax
-
-		Parameters
-		----------
-		yMax : float
-			the height of the ray (default=None)
-			If no height is defined for the ray, then yMax would be set to the height of the axicon (apertureDiameter/2)
-
-		Returns
-		-------
-		focalLineLength : float
-			the length of the focal line
-
-		See ALso
-		--------
-		https://ru.b-ok2.org/book/2482970/9062b7, p.48
-
-		"""
+    """
+    This class is an advanced module that describes an axicon lens, 
+    not part of the basic formalism. Using this class an axicon 
+    conical lens can be presented.
+    Axicon lenses are used to obtain a line focus instead of a point.
+    The formalism is described in Kloos, sec. 2.2.3
 
-		if yMax == None:
-			yMax = self.apertureDiameter/2
+    Parameters
+    ----------
+    alpha : float
+        alpha is the small angle in radians of the axicon
+        (typically 2.5 or 5 degrees) corresponding to 90-apex angle
+    n : float
+        index of refraction.
+        This value cannot be less than 1.0. It is assumed the axicon
+        is in air.
+    diameter : float
+        Aperture of the element. (default = +Inf)
+        The diameter of the aperture must be a positive value.
+    label : string
+        The label of the axicon lens.
 
-		return yMax/(self.n-1.0)/self.alpha
+    """
 
-	def mul_ray(self, rightSideRay):
-		""" This function is used to calculate the output ray through an axicon.
+    def __init__(self, alpha, n, diameter=float('+Inf'), label=''):
 
-		Parameters
-		----------
-		rightSideRay : object of ray class
-			A ray with a defined height and angle.
+        self.n = n
+        self.alpha = alpha
+        super(Axicon, self).__init__(A=1, B=0, C=0, D=1, physicalLength=0, apertureDiameter=diameter, label=label,
+                                     frontIndex=1.0, backIndex=1.0)
 
-		Returns
-		-------
-		outputRay : object of ray class
-			the height and angle of the output ray.
+    def deviationAngle(self):
+        """ This function provides deviation angle delta assuming that
+        the axicon is in air and that the incidence is near normal,
+        which is the usual way of using an axicon.
 
-		See Also
-		--------
-		raytracing.Matrix.mul_ray
+        Returns
+        -------
+        delta : float
+            the deviation angle
 
+        See ALso
+        --------
+        https://ru.b-ok2.org/book/2482970/9062b7, p.48
+
+        """
+
+        return (self.n - 1.0) * self.alpha
+
+    def focalLineLength(self, yMax=None):
+        """ Provides the line length, assuming a ray at height yMax
+
+        Parameters
+        ----------
+        yMax : float
+            the height of the ray (default=None)
+            If no height is defined for the ray, then yMax would be set to the height of the axicon (apertureDiameter/2)
+
+        Returns
+        -------
+        focalLineLength : float
+            the length of the focal line
+
+        See ALso
+        --------
+        https://ru.b-ok2.org/book/2482970/9062b7, p.48
+
+        """
+
+        if yMax == None:
+            yMax = self.apertureDiameter / 2
+
+        return abs(yMax) / (self.n - 1.0) / self.alpha
+
+    def mul_ray(self, rightSideRay):
+        """ This function is used to calculate the output ray through an axicon.
+
+        Parameters
+        ----------
+        rightSideRay : object of ray class
+            A ray with a defined height and angle.
+
+        Returns
+        -------
+        outputRay : object of ray class
+            the height and angle of the output ray.
+
+        See Also
+        --------
+        raytracing.Matrix.mul_ray
+
+
+        """
+
+        outputRay = super(Axicon, self).mul_ray(rightSideRay)
+
+        if rightSideRay.y > 0:
+            outputRay.theta += -self.deviationAngle()
+        elif rightSideRay.y < 0:
+            outputRay.theta += self.deviationAngle()
+        # theta == 0 is not deviated
+
+        return outputRay
+
+    def mul_matrix(self, rightSideMatrix):
+        """ The final matrix of an optical path with an axicon can be calculated using this function.
+
+        Parameters
+        ----------
+        rightSideMatrix : object of matrix class
+            The ABCD matrix of an element or an optical path.
 
-		"""
+        Notes
+        -----
+        For now the final matrix with an axicon in the path cannot be calculated.
 
-		outputRay = super(Axicon, self).mul_ray(rightSideRay)
+        """
 
-		if rightSideRay.y > 0:
-			outputRay.theta += -self.deviationAngle()
-		elif rightSideRay.y < 0:
-			outputRay.theta +=  self.deviationAngle()
-		# theta == 0 is not deviated
-				
-		return outputRay
+        raise TypeError("Cannot calculate final matrix with axicon in path. \
+            You can only propagate rays all the way through")
 
-	def mul_mat(self, rightSideMatrix):
-		""" The final matrix of an optical path with an axicon can be calculated using this function.
+    def mul_beam(self, rightSideBeam):
+        """This function calculates the multiplication of a coherent beam with complex radius
+        of curvature q by an ABCD matrix.
 
-		Parameters
-		----------
-		rightSideMatrix : object of matrix class
-			The ABCD matrix of an element or an optical path.
+        Parameters
+        ----------
+        rightSideBeam : object from GaussianBeam class
+            including the beam properties
 
-		Notes
-		-----
-		For now the final matrix with an axicon in the path cannot be calculated.
 
-		"""
+        Returns
+        -------
+        outputBeam : object from GaussianBeam class
+            The properties of the beam at the output of the system with the defined ABCD matrix
 
-		raise TypeError("Cannot calculate final matrix with axicon in path. \
-			You can only propagate rays all rhe way through")
+        Examples
+        --------
+        >>> from raytracing import *
+        >>> # M1 is an ABCD matrix of a lens (f=10)
+        >>> M1= Matrix(A=1,B=0,C=-1/10,D=1,physicalLength=5,label='Lens')
+        >>> # B is a Gaussian Beam
+        >>> B=GaussianBeam(q=complex(1,1),w=1,R=5,n=1)
+        >>> print('The output properties of are:' , M1.mul_beam(B))
+        The output ray of Lens M1 : Complex radius: (0.976+1.22j)
+        w(z): 0.020, R(z): 2.500, z: 5.000, λ: 632.8 nm
+        zo: 1.220, wo: 0.016, wo position: -0.976
 
-	def drawAt(self, z, axes):
-		halfHeight = 4
-		if self.apertureDiameter != float('Inf'):
-			halfHeight = self.apertureDiameter/2
+        See Also
+        --------
+        raytracing.Matrix.mul_matrix
+        raytracing.Matrix.mul_ray
+        raytracing.GaussianBeam
+        """
 
-		plt.arrow(z, 0, 0, halfHeight, width=0.1, fc='k', ec='k',head_length=0.25, head_width=0.25,length_includes_head=True)
-		plt.arrow(z, 0, 0, -halfHeight, width=0.1, fc='k', ec='k',head_length=0.25, head_width=0.25, length_includes_head=True)
+        raise TypeError("Cannot use Axicon with GaussianBeam, only with Ray")
 
+    def drawAt(self, z, axes):  # pragma: no cover
+        halfHeight = 4
+        if self.apertureDiameter != float('Inf'):
+            halfHeight = self.apertureDiameter / 2
 
+        plt.arrow(z, 0, 0, halfHeight, width=0.1, fc='k', ec='k', head_length=0.25, head_width=0.25,
+                  length_includes_head=True)
+        plt.arrow(z, 0, 0, -halfHeight, width=0.1, fc='k', ec='k', head_length=0.25, head_width=0.25,
+                  length_includes_head=True)

Axicon does not change the values of backIndex and frontIndex
The `Axicon` class does not change the default values of `backIndex` and `frontIndex` with the input value `n`.
diff --git a/raytracing/tests/testsAxicon.py b/raytracing/tests/testsAxicon.py
new file mode 100644
index 0000000..483cafa
--- /dev/null
+++ b/raytracing/tests/testsAxicon.py
@@ -0,0 +1,108 @@
+import envtest
+
+from raytracing import *
+from numpy import random
+from numpy import *
+
+inf = float("+inf")
+degrees = math.pi/180
+
+class TestAxicon(envtest.RaytracingTestCase):
+
+    def testAxicon(self):
+        n = 1.5
+        alpha = 2.6*degrees
+        diameter = 100
+        label = "Axicon"
+        axicon = Axicon(alpha, n, diameter, label)
+        self.assertEqual(axicon.n, n)
+        self.assertEqual(axicon.alpha, alpha)
+        self.assertEqual(axicon.apertureDiameter, diameter)
+        self.assertEqual(axicon.label, label)
+        self.assertEqual(axicon.frontIndex, 1.0)
+        self.assertEqual(axicon.backIndex, 1.0)
+
+    def testDeviationAngleIs0(self):
+        n = 1
+        alpha = random.randint(2000, 5000, 1).item() / 1000*degrees
+        axicon = Axicon(alpha, n)
+        self.assertEqual(axicon.deviationAngle(), 0)
+
+    def testDeviationAngleIs0Too(self):
+        n = random.randint(1000, 3000, 1).item() / 1000
+        alpha = 0*degrees
+        axicon = Axicon(alpha, n)
+        self.assertEqual(axicon.deviationAngle(), 0)
+
+    def testDeviationAngle(self):
+        n = 1.33
+        alpha = 4*degrees
+        axicon = Axicon(alpha, n)
+        self.assertAlmostEqual(axicon.deviationAngle(), 1.32*degrees, places=15)
+
+    def testFocalLineLengthYIsNoneAndInfiniteDiameter(self):
+        n = random.randint(1000, 3000, 1).item() / 1000
+        alpha = random.randint(2000, 5000, 1).item() / 1000*degrees
+        axicon = Axicon(alpha, n)
+        self.assertEqual(axicon.focalLineLength(), inf)
+
+    def testFocalLineLengthYIsNone(self):
+        n = 1.5
+        alpha = 2.6*degrees
+        axicon = Axicon(alpha, n, 100)
+        y = 50
+        L = y/tan(axicon.deviationAngle())
+        self.assertAlmostEqual(axicon.focalLineLength(), L,0)
+
+    def testFocalLineLengthSignOfY(self):
+        n = 1.43
+        alpha = 1.95*degrees
+        axicon = Axicon(alpha=alpha, n=n, diameter=100)
+        self.assertAlmostEqual(axicon.focalLineLength(-2), axicon.focalLineLength(2))
+
+    def testFocalLineLengthPositiveY(self):
+        n = 1.43
+        alpha = 1.95*degrees
+        axicon = Axicon(alpha, n, 100)
+        y = 2
+        L = y/tan(axicon.deviationAngle())
+        self.assertAlmostEqual(axicon.focalLineLength(y), L, 1)
+
+    def testHighRayIsDeviatedDown(self):
+        ray = Ray(10, 0)
+        n = 1.1
+        alpha = 2.56*degrees
+        axicon = Axicon(alpha, n, 50)
+        outputRay = axicon*ray
+        self.assertEqual(outputRay.theta, -axicon.deviationAngle())
+        self.assertTrue(outputRay.theta < 0)
+
+    def testLowRayIsDeviatedUp(self):
+        ray = Ray(-10, 0)
+        n = 1.1
+        alpha = 2.56*degrees
+        axicon = Axicon(alpha, n, 50)
+        outputRay = axicon*ray
+        self.assertEqual(outputRay.theta, axicon.deviationAngle())
+        self.assertTrue(outputRay.theta > 0)
+
+    def testMulMatrix(self):
+        matrix = Matrix()
+        axicon = Axicon(2.6543, 1.2*degrees)
+        with self.assertRaises(TypeError):
+            axicon.mul_matrix(matrix)
+
+    def testDifferentMultiplications(self):
+        ray = Ray()
+        beam = GaussianBeam(w=1, R=10, n=1.67)
+        matrix = Matrix()
+        axicon = Axicon(4.3, 1.67*degrees)
+        self.assertIsNotNone(axicon * ray)
+        with self.assertRaises(TypeError):
+            axicon * beam
+
+        with self.assertRaises(TypeError):
+            axicon * matrix
+
+if __name__ == '__main__':
+    envtest.main()
diff --git a/raytracing/tests/testsMatrixGroup.py b/raytracing/tests/testsMatrixGroup.py
index 95fa3ac..f0e835f 100644
--- a/raytracing/tests/testsMatrixGroup.py
+++ b/raytracing/tests/testsMatrixGroup.py
@@ -4,7 +4,7 @@ from raytracing import *
 
 inf = float("+inf")
 
-testSaveHugeFile = True
+testSaveHugeFiles = True
 
 
 class TestMatrixGroup(envtest.RaytracingTestCase):
@@ -591,11 +591,11 @@ class TestSaveAndLoadMatrixGroup(envtest.RaytracingTestCase):
         mg = MatrixGroup([Space(20), ThickLens(1.22, 10, 10, 10)])
         self.assertSaveNotFailed(mg, self.fileName)
 
-    @envtest.skipIf(not testSaveHugeFile, "Don't test saving a lot of matrices")
+    @envtest.skipIf(not testSaveHugeFiles, "Don't test saving a lot of matrices")
     def testSaveHugeFile(self):
         fname = self.tempFilePath("hugeFile.pkl")
-        spaces = [Space(10) for _ in range(500)]
-        lenses = [Lens(10) for _ in range(500)]
+        spaces = [Space(10) for _ in range(200)]
+        lenses = [Lens(10) for _ in range(200)]
         elements = spaces + lenses
         mg = MatrixGroup(elements)
         self.assertSaveNotFailed(mg, fname)
@@ -655,11 +655,11 @@ class TestSaveAndLoadMatrixGroup(envtest.RaytracingTestCase):
         self.assertLoadNotFailed(mg2, fname)
         self.assertLoadEqualsMatrixGroup(mg2, mg1)
 
-    @envtest.skipIf(not testSaveHugeFile, "Don't test saving a lot of matrices")
+    @envtest.skipIf(not testSaveHugeFiles, "Don't test saving a lot of matrices")
     def testSaveThenLoadHugeFile(self):
         fname = self.tempFilePath("hugeFile.pkl")
-        spaces = [Space(10) for _ in range(500)]
-        lenses = [Lens(10) for _ in range(500)]
+        spaces = [Space(10) for _ in range(125)]
+        lenses = [Lens(10) for _ in range(125)]
         elements = spaces + lenses
         mg1 = MatrixGroup(elements)
         mg2 = MatrixGroup()

pip install -e .
parse_log_pytest
numpy>=1.16.0 matplotlib
pytest
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
Brotli @ file:///croot/brotli-split_1736182456865/work
contourpy @ file:///croot/contourpy_1738160616259/work
cycler @ file:///tmp/build/80754af9/cycler_1637851556182/work
exceptiongroup==1.2.2
fonttools @ file:///croot/fonttools_1737039080035/work
importlib_resources @ file:///croot/importlib_resources-suite_1720641103994/work
iniconfig==2.1.0
kiwisolver @ file:///croot/kiwisolver_1672387140495/work
matplotlib==3.9.2
numpy @ file:///croot/numpy_and_numpy_base_1736283260865/work/dist/numpy-2.0.2-cp39-cp39-linux_x86_64.whl#sha256=3387e3e62932fa288bc18e8f445ce19e998b418a65ed2064dd40a054f976a6c7
packaging @ file:///croot/packaging_1734472117206/work
pillow @ file:///croot/pillow_1738010226202/work
pluggy==1.5.0
pyparsing @ file:///croot/pyparsing_1731445506121/work
PyQt6==6.7.1
PyQt6_sip @ file:///croot/pyqt-split_1740498191142/work/pyqt_sip
pytest==8.3.5
python-dateutil @ file:///croot/python-dateutil_1716495738603/work
-e git+https://github.com/DCC-Lab/RayTracing.git@0574559c65ccce3efb17d36176d0985c9c20a781#egg=raytracing
sip @ file:///croot/sip_1738856193618/work
six @ file:///tmp/build/80754af9/six_1644875935023/work
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tornado @ file:///croot/tornado_1733960490606/work
unicodedata2 @ file:///croot/unicodedata2_1736541023050/work
zipp @ file:///croot/zipp_1732630741423/work

name: RayTracing
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - blas=1.0=openblas
  - brotli-python=1.0.9=py39h6a678d5_9
  - bzip2=1.0.8=h5eee18b_6
  - c-ares=1.19.1=h5eee18b_0
  - ca-certificates=2025.2.25=h06a4308_0
  - contourpy=1.2.1=py39hdb19cb5_1
  - cycler=0.11.0=pyhd3eb1b0_0
  - cyrus-sasl=2.1.28=h52b45da_1
  - expat=2.6.4=h6a678d5_0
  - fontconfig=2.14.1=h55d465d_3
  - fonttools=4.55.3=py39h5eee18b_0
  - freetype=2.12.1=h4a9f257_0
  - icu=73.1=h6a678d5_0
  - importlib_resources=6.4.0=py39h06a4308_0
  - jpeg=9e=h5eee18b_3
  - kiwisolver=1.4.4=py39h6a678d5_0
  - krb5=1.20.1=h143b758_1
  - lcms2=2.16=hb9589c4_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - lerc=4.0.0=h6a678d5_0
  - libabseil=20250127.0=cxx17_h6a678d5_0
  - libcups=2.4.2=h2d74bed_1
  - libcurl=8.12.1=hc9e6f67_0
  - libdeflate=1.22=h5eee18b_0
  - libedit=3.1.20230828=h5eee18b_0
  - libev=4.33=h7f8727e_1
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgfortran-ng=11.2.0=h00389a5_1
  - libgfortran5=11.2.0=h1234567_1
  - libglib=2.78.4=hdc74915_0
  - libgomp=11.2.0=h1234567_1
  - libiconv=1.16=h5eee18b_3
  - libnghttp2=1.57.0=h2d74bed_0
  - libopenblas=0.3.21=h043d6bf_0
  - libpng=1.6.39=h5eee18b_0
  - libpq=17.4=hdbd6064_0
  - libprotobuf=5.29.3=hc99497a_0
  - libssh2=1.11.1=h251f7ec_0
  - libstdcxx-ng=11.2.0=h1234567_1
  - libtiff=4.5.1=hffd6297_1
  - libuuid=1.41.5=h5eee18b_0
  - libwebp-base=1.3.2=h5eee18b_1
  - libxcb=1.15=h7f8727e_0
  - libxkbcommon=1.0.1=h097e994_2
  - libxml2=2.13.5=hfdd30dd_0
  - lz4-c=1.9.4=h6a678d5_1
  - matplotlib=3.9.2=py39h06a4308_1
  - matplotlib-base=3.9.2=py39hbfdbfaf_1
  - mysql=8.4.0=h721767e_2
  - ncurses=6.4=h6a678d5_0
  - numpy=2.0.2=py39heeff2f4_0
  - numpy-base=2.0.2=py39h8a23956_0
  - openjpeg=2.5.2=he7f1fd0_0
  - openldap=2.6.4=h42fbc30_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pcre2=10.42=hebb0a14_1
  - pillow=11.1.0=py39hcea889d_0
  - pip=25.0=py39h06a4308_0
  - pyparsing=3.2.0=py39h06a4308_0
  - pyqt=6.7.1=py39h6a678d5_0
  - pyqt6-sip=13.9.1=py39h5eee18b_0
  - python=3.9.21=he870216_1
  - python-dateutil=2.9.0post0=py39h06a4308_2
  - qtbase=6.7.3=hdaa5aa8_0
  - qtdeclarative=6.7.3=h6a678d5_0
  - qtsvg=6.7.3=he621ea3_0
  - qttools=6.7.3=h80c7b02_0
  - qtwebchannel=6.7.3=h6a678d5_0
  - qtwebsockets=6.7.3=h6a678d5_0
  - readline=8.2=h5eee18b_0
  - setuptools=72.1.0=py39h06a4308_0
  - sip=6.10.0=py39h6a678d5_0
  - six=1.16.0=pyhd3eb1b0_1
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tornado=6.4.2=py39h5eee18b_0
  - tzdata=2025a=h04d1e81_0
  - unicodedata2=15.1.0=py39h5eee18b_1
  - wheel=0.45.1=py39h06a4308_0
  - xcb-util-cursor=0.1.4=h5eee18b_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.21.0=py39h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - zstd=1.5.6=hc292b87_0
  - pip:
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - pluggy==1.5.0
      - pytest==8.3.5
prefix: /opt/conda/envs/RayTracing

raytracing/tests/testsAxicon.py::TestAxicon::testDifferentMultiplications raytracing/tests/testsAxicon.py::TestAxicon::testFocalLineLengthSignOfY raytracing/tests/testsAxicon.py::TestAxicon::testMulMatrix
raytracing/tests/testsAxicon.py::TestAxicon::testAxicon raytracing/tests/testsAxicon.py::TestAxicon::testDeviationAngle raytracing/tests/testsAxicon.py::TestAxicon::testDeviationAngleIs0 raytracing/tests/testsAxicon.py::TestAxicon::testDeviationAngleIs0Too raytracing/tests/testsAxicon.py::TestAxicon::testFocalLineLengthPositiveY raytracing/tests/testsAxicon.py::TestAxicon::testFocalLineLengthYIsNone raytracing/tests/testsAxicon.py::TestAxicon::testFocalLineLengthYIsNoneAndInfiniteDiameter raytracing/tests/testsAxicon.py::TestAxicon::testHighRayIsDeviatedDown raytracing/tests/testsAxicon.py::TestAxicon::testLowRayIsDeviatedUp raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendNoElementInit raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendNoRefractionIndicesMismatch raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendNotCorrectType raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendNotSpaceIndexOfRefractionMismatch raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendRefractionIndicesMismatch raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testAppendSpaceMustAdoptIndexOfRefraction raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testEqualityDifferentClassInstance raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testEqualityDifferentListLength raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testEqualityGroupIs4f raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testEqualitySameGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testEqualitySameLengthDifferentElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testFlipOrientationEmptyGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testFlipOrientation_1 raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testFlipOrientation_2 raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testGetItem raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testGetItemOutOfBoundsEmpty raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testGetItemOutOfBoundsSingleIndex raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testGetItemSlice raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testHasFiniteApertutreDiameter raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInitWithAnotherMatrixGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInsertAfterLast raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInsertBeforeFirst raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInsertInMiddle raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInsertNegativeIndexOutOfBoundsNoErrors raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testInsertPositiveIndexOutOfBoundsNoError raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testIntermediateConjugates raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testIntermediateConjugatesDuplicates raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testIntermediateConjugatesEmptyGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testIntermediateConjugatesNoConjugate raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testIntermediateConjugatesNoThickness raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testLargestDiameter raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testLargestDiameterNoFiniteAperture raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testLargestDiameterWithEmptyGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testLenEmptyGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testLenNotEmpty raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testMatrixGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testMatrixGroupDoesNotAcceptNonIterable raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testMatrixGroupDoesNotAcceptRandomClass raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testMatrixGroupDoesnNotAcceptStr raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testMatrixGroupWithElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testPopElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testPopFirstElement raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testPopLastElement raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testPopNegativeIndexOutOfBounds raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testPopPositiveIndexOutOfBounds raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemAll raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemSingleIndex raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemSingleIndexOutOfBounds raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemSliceIndexOutOfBounds raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemSliceWithStepIsOne raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemSliceWithStepWarning raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemStartIndexIsNone raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testSetItemStopIndexIsNone raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTrace raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTraceAlreadyTraced raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTraceEmptyMatrixGroup raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTraceIncorrectType raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatricesNoElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatricesOneElement raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatrix raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatrixNoElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatrixTwoElements raytracing/tests/testsMatrixGroup.py::TestMatrixGroup::testTransferMatrixUpToInGroup raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadAppend raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadFileDoesNotExist raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadInEmptyMatrixGroup raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadOverrideMatrixGroup raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadWrongIterType raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testLoadWrongObjectType raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveEmpty raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveHugeFile raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveInFileNotEmpty raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveNotEmpty raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveThenLoad raytracing/tests/testsMatrixGroup.py::TestSaveAndLoadMatrixGroup::testSaveThenLoadHugeFile
raytracing/axicon.py
raytracing/axicon.py