Repository: lukew3/mathgenerator (language: python)

Issue:
Replace stars in subject __init__ files with generator names
May be as simple as changing 
https://github.com/lukew3/mathgenerator/blob/44924a4fcb6434963d633e3f2784ef4a3a965424/scripts/adoptGenerator.py#L36
 to
```
lines.append(f"from .{item} import {item}\n")
```


Discussion / hints:

Fix patch:
diff --git a/README.md b/README.md
index 2831b410..522105a5 100644
--- a/README.md
+++ b/README.md
@@ -40,6 +40,7 @@ problem, solution = mathgen.addition()
 #another way to generate an addition problem using genById()
 problem, solution = mathgen.genById(0)
 ```
+<!--
 ### Creating a worksheet
 If you wish to create a worksheet, you can use the [worksheetgen](https://github.com/lukew3/worksheetgen) package. Install this with `pip install worksheetgen`. Here is an example of how a worksheet would be generated.
 ```
@@ -54,6 +55,7 @@ with ws.section('Section 1', description='These are instructions')
 ws.write_pdf()
 ```
 This creates the pdf `ws.pdf` in your current directory
+-->
 
 ## Documentation
 * `getGenList()` returns a list of all generators in the repository in the format `[id, title, self, funcname, subjectname]`
@@ -68,146 +70,145 @@ This creates the pdf `ws.pdf` in your current directory
 ## algebra
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 11 | [Basic Algebra](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/basic_algebra.py) | 5x + 5 = 7 | 2/5 | basic_algebra | `maxVariable=10`  |
-| 12 | [Logarithm](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/log.py) | log3(6561) | 8 | log | `maxBase=3` `maxVal=8`  |
-| 17 | [Integer Multiplication with 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py) | 10 * [[10, 8], [9, 1]] =  | [[100,80],[90,10]] | multiply_int_to_22_matrix | `maxMatrixVal=10` `maxRes=100`  |
-| 20 | [Midpoint of the two point](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/midpoint_of_two_points.py) | (-8,12),(8,-12)= | (0.0,0.0) | midpoint_of_two_points | `maxValue=20`  |
-| 21 | [Factoring Quadratic](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/factoring.py) | x^2-25 | (x+5)(x-5) | factoring | `range_x1=10` `range_x2=10`  |
-| 23 | [Solve a System of Equations in R^2](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/system_of_equations.py) | 4x + 9y = -38, 3x + 8y = -36 | x = 4, y = -6 | system_of_equations | `range_x=10` `range_y=10` `coeff_mult_range=10`  |
-| 24 | [Distance between 2 points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/distance_two_points.py) | Find the distance between (-3, 21) and (17, 3) | sqrt(724) | distance_two_points | `maxValXY=20` `minValXY=-20`  |
-| 26 | [Linear Equations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/linear_equations.py) | 11x + -13y = -389, 16x + -11y = -463 | x = -20, y = 13 | linear_equations | `n=2` `varRange=20` `coeffRange=20`  |
-| 41 | [Intersection of Two Lines](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/intersection_of_two_lines.py) | Find the point of intersection of the two lines: y = 4/6x - 10 and y = 5x + 7 | (-51/13, -164/13) | intersection_of_two_lines | `minM=-10` `maxM=10` `minB=-10` `maxB=10` `minDenominator=1` `maxDenominator=6`  |
-| 43 | [Cross Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_cross.py) | [11, 8, 9] X [-20, 11, -12] =  | [-195, -48, 281] | vector_cross | `minVal=-20` `maxVal=20`  |
-| 45 | [Simple Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/simple_interest.py) | Simple interest for a principle amount of 9453 dollars, 6% rate of interest and for a time period of 6 years is =  | 3403.08 | simple_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10`  |
-| 46 | [Multiplication of two matrices](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/matrix_multiplication.py) | Multiply<table><tr><td>-1</td><td>-5</td><td>0</td><td>1</td></tr><tr><td>8</td><td>-8</td><td>10</td><td>9</td></tr><tr><td>-8</td><td>8</td><td>-5</td><td>7</td></tr><tr><td>1</td><td>-5</td><td>1</td><td>-3</td></tr></table>and<table><tr><td>1</td><td>-2</td></tr><tr><td>5</td><td>-2</td></tr><tr><td>5</td><td>-2</td></tr><tr><td>9</td><td>-1</td></tr></table> | <table><tr><td>-17</td><td>11</td></tr><tr><td>99</td><td>-29</td></tr><tr><td>70</td><td>3</td></tr><tr><td>-46</td><td>9</td></tr></table> | matrix_multiplication | `maxVal=100` `max_dim=10`  |
-| 50 | [Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/quadratic_equation.py) | Zeros of the Quadratic Equation 38x^2+176x+57=0 | [-0.35, -4.28] | quadratic_equation | `maxVal=100`  |
-| 65 | [Multiplication of 2 complex numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_complex_numbers.py) | (13+14j) * (-20-11j) =  | (-106-423j) | multiply_complex_numbers | `minRealImaginaryNum=-20` `maxRealImaginaryNum=20`  |
-| 72 | [Dot Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_dot.py) | [0, 18, -7] . [-11, -12, 14] =  | -314 | vector_dot | `minVal=-20` `maxVal=20`  |
-| 74 | [Inverse of a Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/invert_matrix.py) | Inverse of Matrix Matrix([[69, 83, 21], [13, 46, 72], [53, 24, 42]]) is: | Matrix([[17/20070, -497/40140, 167/8028], [109/8028, 119/16056, -313/16056], [-1063/120420, 2743/240840, 419/48168]]) | invert_matrix | `SquareMatrixDimension=3` `MaxMatrixElement=99` `OnlyIntegerElementsInInvertedMatrix=False`  |
-| 77 | [Determinant to 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/int_matrix_22_determinant.py) | Det([[27, 0], [66, 78]]) =  |  2106 | int_matrix_22_determinant | `maxMatrixVal=100`  |
-| 78 | [Compound Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/compound_interest.py) | Compound interest for a principle amount of 9116 dollars, 6% rate of interest and for a time period of 7 year is =  | 13707.09 | compound_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10`  |
-| 100 | [complex Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/complex_quadratic.py) | Find the roots of given Quadratic Equation 2x^2 + 8x + 3 = 0 | simplified solution : ((-0.419, -3.581)), generalized solution : ((-8 + sqrt(40))/2*2, (-8 - sqrt(40))/2*2) | complex_quadratic | `prob_type=0` `max_range=10`  |
-| 105 | [Combine Like terms](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/combine_like_terms.py) | 8x^5 + 5x^2 + 2x^5 + 5x^2 + 9x^2 + 7x^6 + 1x^5 | 19x^2 + 11x^5 + 7x^6  | combine_like_terms | `maxCoef=10` `maxExp=20` `maxTerms=10`  |
-| 111 | [Expanding Factored Binomial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/expanding.py) | (-5x+10)(-5x-10) | 25*x^2*x-100 | expanding | `range_x1=10` `range_x2=10` `range_a=10` `range_b=10`  |
+| 11 | [Basic Algebra](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/basic_algebra.py) | 9x + 5 = 8 | 1/3 | basic_algebra | `maxVariable=10`  |
+| 12 | [Logarithm](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/log.py) | log2(256) | 8 | log | `maxBase=3` `maxVal=8`  |
+| 17 | [Integer Multiplication with 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py) | 9 * [[7, 8], [6, 8]] =  | [[63,72],[54,72]] | multiply_int_to_22_matrix | `maxMatrixVal=10` `maxRes=100`  |
+| 20 | [Midpoint of the two point](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/midpoint_of_two_points.py) | (-12,5),(-20,6)= | (-16.0,5.5) | midpoint_of_two_points | `maxValue=20`  |
+| 21 | [Factoring Quadratic](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/factoring.py) | x^2-8x+15 | (x-3)(x-5) | factoring | `range_x1=10` `range_x2=10`  |
+| 23 | [Solve a System of Equations in R^2](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/system_of_equations.py) | 5x + 3y = -1, -9x - 3y = -15 | x = 4, y = -7 | system_of_equations | `range_x=10` `range_y=10` `coeff_mult_range=10`  |
+| 24 | [Distance between 2 points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/distance_two_points.py) | Find the distance between (-19, -9) and (16, 14) | sqrt(1754) | distance_two_points | `maxValXY=20` `minValXY=-20`  |
+| 26 | [Linear Equations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/linear_equations.py) | 7x + -13y = 198, -4x + 19y = -171 | x = 19, y = -5 | linear_equations | `n=2` `varRange=20` `coeffRange=20`  |
+| 41 | [Intersection of Two Lines](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/intersection_of_two_lines.py) | Find the point of intersection of the two lines: y = -10/6x + 7 and y = -1/3x + 9 | (-3/2, 19/2) | intersection_of_two_lines | `minM=-10` `maxM=10` `minB=-10` `maxB=10` `minDenominator=1` `maxDenominator=6`  |
+| 43 | [Cross Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_cross.py) | [12, 14, -20] X [11, 13, 3] =  | [302, -256, 2] | vector_cross | `minVal=-20` `maxVal=20`  |
+| 45 | [Simple Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/simple_interest.py) | Simple interest for a principle amount of 2634 dollars, 1% rate of interest and for a time period of 10 years is =  | 263.4 | simple_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10`  |
+| 46 | [Multiplication of two matrices](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/matrix_multiplication.py) | Multiply<table><tr><td>7</td><td>4</td><td>-1</td><td>-4</td></tr><tr><td>5</td><td>8</td><td>-9</td><td>7</td></tr><tr><td>-6</td><td>0</td><td>-3</td><td>-10</td></tr></table>and<table><tr><td>1</td><td>-5</td><td>-9</td></tr><tr><td>2</td><td>-10</td><td>10</td></tr><tr><td>-9</td><td>6</td><td>-8</td></tr><tr><td>-7</td><td>4</td><td>10</td></tr></table> | <table><tr><td>52</td><td>-97</td><td>-55</td></tr><tr><td>53</td><td>-131</td><td>177</td></tr><tr><td>91</td><td>-28</td><td>-22</td></tr></table> | matrix_multiplication | `maxVal=100` `max_dim=10`  |
+| 50 | [Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/quadratic_equation.py) | Zeros of the Quadratic Equation 4x^2+176x+52=0 | [-0.3, -43.7] | quadratic_equation | `maxVal=100`  |
+| 65 | [Multiplication of 2 complex numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/multiply_complex_numbers.py) | (2+14j) * (-7-11j) =  | (140-120j) | multiply_complex_numbers | `minRealImaginaryNum=-20` `maxRealImaginaryNum=20`  |
+| 72 | [Dot Product of 2 Vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/vector_dot.py) | [-18, 1, -5] . [10, 6, 19] =  | -269 | vector_dot | `minVal=-20` `maxVal=20`  |
+| 74 | [Inverse of a Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/invert_matrix.py) | Inverse of Matrix Matrix([[23, 69, 7], [40, 91, 89], [11, 1, 47]]) is: | Matrix([[1047/6857, -809/6857, 1376/6857], [-901/27428, 251/6857, -1767/27428], [-961/27428, 184/6857, -667/27428]]) | invert_matrix | `SquareMatrixDimension=3` `MaxMatrixElement=99` `OnlyIntegerElementsInInvertedMatrix=False`  |
+| 77 | [Determinant to 2x2 Matrix](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/int_matrix_22_determinant.py) | Det([[87, 46], [20, 61]]) =  |  4387 | int_matrix_22_determinant | `maxMatrixVal=100`  |
+| 78 | [Compound Interest](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/compound_interest.py) | Compound interest for a principle amount of 1502 dollars, 8% rate of interest and for a time period of 8 year is =  | 2780.1 | compound_interest | `maxPrinciple=10000` `maxRate=10` `maxTime=10`  |
+| 100 | [complex Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/complex_quadratic.py) | Find the roots of given Quadratic Equation 4x^2 + 9x + 2 = 0 | simplified solution : ((-0.25, -2.0)), generalized solution : ((-9 + 7)/2*4, (-9 - 7)/2*4) | complex_quadratic | `prob_type=0` `max_range=10`  |
+| 105 | [Combine Like terms](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/combine_like_terms.py) | 4x^6 + 9x^6 + 1x^4 + 2x^4 + 4x^1 + 3x^2 + 8x^5 | 4x^1 + 3x^2 + 3x^4 + 8x^5 + 13x^6  | combine_like_terms | `maxCoef=10` `maxExp=20` `maxTerms=10`  |
+| 111 | [Expanding Factored Binomial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/algebra/expanding.py) | (x-4)(-1x+9) | -1*x^2+13*x-36 | expanding | `range_x1=10` `range_x2=10` `range_a=10` `range_b=10`  |
 ## basic_math
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 0 | [Addition](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/addition.py) | 18+33= | 51 | addition | `maxSum=99` `maxAddend=50`  |
-| 1 | [Subtraction](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/subtraction.py) | 51-4= | 47 | subtraction | `maxMinuend=99` `maxDiff=99`  |
-| 2 | [Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/multiplication.py) | 5*9= | 45 | multiplication | `maxMulti=12`  |
-| 3 | [Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/division.py) | 209/11= | 19 | division | `maxA=25` `maxB=25`  |
-| 6 | [Square Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square_root.py) | sqrt(9)= | 3 | square_root | `minNo=1` `maxNo=12`  |
-| 8 | [Square](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square.py) | 10^2= | 100 | square | `maxSquareNum=20`  |
-| 13 | [Complex Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/complex_division.py) | 12/26= | 0.46 | complex_division | `maxRes=99` `maxDivid=99`  |
-| 16 | [Fraction Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/divide_fractions.py) | (3/5)/(3/7) | 7/5 | divide_fractions | `maxVal=10`  |
-| 28 | [Fraction Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/fraction_multiplication.py) | (7/5)*(7/9) | 49/45 | fraction_multiplication | `maxVal=10`  |
-| 31 | [Factorial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/factorial.py) | 0! =  | 1 | factorial | `maxInput=6`  |
-| 44 | [Compare Fractions](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/compare_fractions.py) | Which symbol represents the comparison between 6/3 and 2/4? | > | compare_fractions | `maxVal=10`  |
-| 47 | [Cube Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/cube_root.py) | What is the cube root of 194 up to 2 decimal places? | 5.79 | cube_root | `minNo=1` `maxNo=1000`  |
-| 53 | [Exponentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/exponentiation.py) | 4^10 = | 1048576 | exponentiation | `maxBase=20` `maxExpo=10`  |
-| 71 | [Absolute difference between two numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/absolute_difference.py) | |-92--57|= | 35 | absolute_difference | `maxA=100` `maxB=100`  |
-| 80 | [Percentage of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage.py) | What is 14% of 14? | 1.96 | percentage | `maxValue=99` `maxpercentage=99`  |
-| 90 | [isprime](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/is_prime.py) | Is 51 prime? | No | is_prime | `max_num=100`  |
-| 97 | [Power of Powers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/power_of_powers.py) | Simplify 6^10^8= | 6^80 | power_of_powers | `maxBase=50` `maxPower=10`  |
-| 118 | [Percentage difference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage_difference.py) | What is the percentage difference between 53 and 90? | 51.75% | percentage_difference | `maxValue=200` `minValue=0`  |
-| 119 | [Percentage error](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage_error.py) | Find the percentage error when observed value equals 33 and exact value equals 61. | 45.9% | percentage_error | `maxValue=100` `minValue=-100`  |
-| 120 | [Greatest Common Divisor of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/greatest_common_divisor.py) | GCD(21465961,176654083)= | 1 | greatest_common_divisor | `numbersCount=2` `maximalNumberLimit=10**9`  |
-| 124 | [Is Composite](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/is_composite.py) | Is 8 composite? | Yes | is_composite | `maxNum=250`|
+| 0 | [Addition](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/addition.py) | \(33+2\) | 35 | addition | `maxSum=99` `maxAddend=50`  |
+| 1 | [Subtraction](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/subtraction.py) | 11-9= | 2 | subtraction | `maxMinuend=99` `maxDiff=99`  |
+| 2 | [Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/multiplication.py) | 10*9= | 90 | multiplication | `maxMulti=12`  |
+| 3 | [Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/division.py) | 208/16= | 13 | division | `maxA=25` `maxB=25`  |
+| 6 | [Square Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square_root.py) | sqrt(144)= | 12 | square_root | `minNo=1` `maxNo=12`  |
+| 8 | [Square](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/square.py) | 15^2= | 225 | square | `maxSquareNum=20`  |
+| 13 | [Complex Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/complex_division.py) | 62/71= | 0.87 | complex_division | `maxRes=99` `maxDivid=99`  |
+| 16 | [Fraction Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/divide_fractions.py) | (1/8)/(4/6) | 3/16 | divide_fractions | `maxVal=10`  |
+| 28 | [Fraction Multiplication](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/fraction_multiplication.py) | (4/7)*(8/5) | 32/35 | fraction_multiplication | `maxVal=10`  |
+| 31 | [Factorial](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/factorial.py) | 6! =  | 720 | factorial | `maxInput=6`  |
+| 44 | [Compare Fractions](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/compare_fractions.py) | Which symbol represents the comparison between 8/7 and 9/4? | < | compare_fractions | `maxVal=10`  |
+| 47 | [Cube Root](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/cube_root.py) | What is the cube root of 419 up to 2 decimal places? | 7.48 | cube_root | `minNo=1` `maxNo=1000`  |
+| 53 | [Exponentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/exponentiation.py) | 19^4 = | 130321 | exponentiation | `maxBase=20` `maxExpo=10`  |
+| 71 | [Absolute difference between two numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/absolute_difference.py) | |86--54|= | 140 | absolute_difference | `maxA=100` `maxB=100`  |
+| 80 | [Percentage of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage.py) | What is 87% of 15? | 13.05 | percentage | `maxValue=99` `maxpercentage=99`  |
+| 90 | [isprime](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/is_prime.py) | Is 59 prime? | Yes | is_prime | `max_num=100`  |
+| 97 | [Power of Powers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/power_of_powers.py) | Simplify 23^9^4= | 23^36 | power_of_powers | `maxBase=50` `maxPower=10`  |
+| 118 | [Percentage difference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage_difference.py) | What is the percentage difference between 151 and 58? | 89.0% | percentage_difference | `maxValue=200` `minValue=0`  |
+| 119 | [Percentage error](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/percentage_error.py) | Find the percentage error when observed value equals -81 and exact value equals -71. | 14.08% | percentage_error | `maxValue=100` `minValue=-100`  |
+| 120 | [Greatest Common Divisor of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/basic_math/greatest_common_divisor.py) | GCD(216648151,624159450)= | 1 | greatest_common_divisor | `numbersCount=2` `maximalNumberLimit=10**9`  |
 ## calculus
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 7 | [Power Rule Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_differentiation.py) | 8x^1 + 5x^2 + 3x^6 + 1x^8 | 8x^0 + 10x^1 + 18x^5 + 8x^7 | power_rule_differentiation | `maxCoef=10` `maxExp=10` `maxTerms=5`  |
-| 48 | [Power Rule Integration](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_integration.py) | 2x^7 + 2x^9 | (2/7)x^8 + (2/9)x^10 + c | power_rule_integration | `maxCoef=10` `maxExp=10` `maxTerms=5`  |
-| 88 | [Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/differentiation.py) | differentiate w.r.t x : d(cos(x)+6*x^4)/dx | 24*x^3 - sin(x) | differentiation | `diff_lvl=2`  |
-| 89 | [Definite Integral of Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/definite_integral.py) | The definite integral within limits 0 to 1 of the equation 70x^2 + 15x + 65 is =  | 95.8333 | definite_integral | `max_coeff=100`  |
-| 110 | [Stationary Points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/stationary_points.py) | f(x)=4*x^2 + 8*x + 6 | (-1,2) | stationary_points | `maxExp=3` `maxCoef=10`  |
+| 7 | [Power Rule Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_differentiation.py) | 2x^1 | 2x^0 | power_rule_differentiation | `maxCoef=10` `maxExp=10` `maxTerms=5`  |
+| 48 | [Power Rule Integration](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/power_rule_integration.py) | 8x^3 + 6x^2 + 2x^6 | (8/3)x^4 + (6/2)x^3 + (2/6)x^7 + c | power_rule_integration | `maxCoef=10` `maxExp=10` `maxTerms=5`  |
+| 88 | [Differentiation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/differentiation.py) | differentiate w.r.t x : d(exp(x)+9*x^(-2))/dx | exp(x) - 18/x^3 | differentiation | `diff_lvl=2`  |
+| 89 | [Definite Integral of Quadratic Equation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/definite_integral.py) | The definite integral within limits 0 to 1 of the equation 76x^2 + 77x + 65 is =  | 128.8333 | definite_integral | `max_coeff=100`  |
+| 110 | [Stationary Points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/calculus/stationary_points.py) | f(x)=x^3 + x^2 + x + 10 |  | stationary_points | `maxExp=3` `maxCoef=10`  |
 ## computer_science
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 4 | [Binary Complement 1s](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_complement_1s.py) | 0= | 1 | binary_complement_1s | `maxDigits=10`  |
-| 5 | [Modulo Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/modulo_division.py) | 53%8= | 5 | modulo_division | `maxRes=99` `maxModulo=99`  |
-| 14 | [Decimal to Binary](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_binary.py) | Binary of 94= | 1011110 | decimal_to_binary | `max_dec=99`  |
-| 15 | [Binary to Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_decimal.py) | 00 | 0 | binary_to_decimal | `max_dig=10`  |
+| 4 | [Binary Complement 1s](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_complement_1s.py) | 00= | 11 | binary_complement_1s | `maxDigits=10`  |
+| 5 | [Modulo Division](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/modulo_division.py) | 7%69= | 7 | modulo_division | `maxRes=99` `maxModulo=99`  |
+| 14 | [Decimal to Binary](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_binary.py) | Binary of 87= | 1010111 | decimal_to_binary | `max_dec=99`  |
+| 15 | [Binary to Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_decimal.py) | 1 | 1 | binary_to_decimal | `max_dig=10`  |
 | 56 | [Fibonacci Series](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/fibonacci_series.py) | The Fibonacci Series of the first 8 numbers is ? | [0, 1, 1, 2, 3, 5, 8, 13] | fibonacci_series | `minNo=1`  |
-| 62 | [nth Fibonacci number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/nth_fibonacci_number.py) | What is the 69th Fibonacci number? | 117669030460994 | nth_fibonacci_number | `maxN=100`  |
-| 64 | [Binary to Hexidecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_hex.py) | 11011101 | 0xdd | binary_to_hex | `max_dig=10`  |
-| 73 | [Binary 2's Complement](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_2s_complement.py) | 2's complement of  = |  | binary_2s_complement | `maxDigits=10`  |
-| 79 | [Decimal to Hexadecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py) | Binary of 639= | 0x27f | decimal_to_hexadeci | `max_dec=1000`  |
-| 84 | [Converts decimal to octal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_octal.py) | The decimal number 3882 in Octal is:  | 0o7452 | decimal_to_octal | `maxDecimal=4096`  |
-| 91 | [Binary Coded Decimal to Integer](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/bcd_to_decimal.py) | Integer of Binary Coded Decimal 9 is =  | 38983 | bcd_to_decimal | `maxNumber=10000`  |
-| 103 | [Decimal to Binary Coded Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_bcd.py) | BCD of Decimal Number 3184 is =  | 1270 | decimal_to_bcd | `maxNumber=10000`  |
+| 62 | [nth Fibonacci number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/nth_fibonacci_number.py) | What is the 13th Fibonacci number? | 233 | nth_fibonacci_number | `maxN=100`  |
+| 64 | [Binary to Hexidecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_to_hex.py) | 00100 | 0x4 | binary_to_hex | `max_dig=10`  |
+| 73 | [Binary 2's Complement](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/binary_2s_complement.py) | 2's complement of 1010 = | 110 | binary_2s_complement | `maxDigits=10`  |
+| 79 | [Decimal to Hexadecimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py) | Binary of 461= | 0x1cd | decimal_to_hexadeci | `max_dec=1000`  |
+| 84 | [Converts decimal to octal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_octal.py) | The decimal number 1681 in Octal is:  | 0o3221 | decimal_to_octal | `maxDecimal=4096`  |
+| 91 | [Binary Coded Decimal to Integer](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/bcd_to_decimal.py) | Integer of Binary Coded Decimal 8 is =  | 33878 | bcd_to_decimal | `maxNumber=10000`  |
+| 103 | [Decimal to Binary Coded Decimal](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/computer_science/decimal_to_bcd.py) | BCD of Decimal Number 6236 is =  | 18512 | decimal_to_bcd | `maxNumber=10000`  |
 ## geometry
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 18 | [Area of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_triangle.py) | Area of triangle with side lengths: 13 5 11 =  | 26.89 | area_of_triangle | `maxA=20` `maxB=20`  |
-| 19 | [Triangle exists check](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/valid_triangle.py) | Does triangle with sides 19, 43 and 32 exist? | Yes | valid_triangle | `maxSideLength=50`  |
-| 22 | [Third Angle of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/third_angle_of_triangle.py) | Third angle of triangle with angles 69 and 64 =  | 47 | third_angle_of_triangle | `maxAngle=89`  |
-| 25 | [Pythagorean Theorem](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/pythagorean_theorem.py) | The hypotenuse of a right triangle given the other two lengths 2 and 12 =  | 12.17 | pythagorean_theorem | `maxLength=20`  |
-| 29 | [Angle of a Regular Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_regular_polygon.py) | Find the angle of a regular polygon with 14 sides | 154.29 | angle_regular_polygon | `minVal=3` `maxVal=20`  |
-| 32 | [Surface Area of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cube.py) | Surface area of cube with side = 8m is | 384 m^2 | surface_area_cube | `maxSide=20` `unit='m'`  |
-| 33 | [Surface Area of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cuboid.py) | Surface area of cuboid with sides = 5m, 2m, 17m is | 258 m^2 | surface_area_cuboid | `maxSide=20` `unit='m'`  |
-| 34 | [Surface Area of Cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cylinder.py) | Surface area of cylinder with height = 8m and radius = 10m is | 1130 m^2 | surface_area_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'`  |
-| 35 | [Volume of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cube.py) | Volume of cube with side = 13m is | 2197 m^3 | volume_cube | `maxSide=20` `unit='m'`  |
-| 36 | [Volume of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cuboid.py) | Volume of cuboid with sides = 13m, 17m, 7m is | 1547 m^3 | volume_cuboid | `maxSide=20` `unit='m'`  |
-| 37 | [Volume of cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cylinder.py) | Volume of cylinder with height = 34m and radius = 3m is | 961 m^3 | volume_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'`  |
-| 38 | [Surface Area of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cone.py) | Surface area of cone with height = 36m and radius = 20m is | 3844 m^2 | surface_area_cone | `maxRadius=20` `maxHeight=50` `unit='m'`  |
-| 39 | [Volume of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cone.py) | Volume of cone with height = 37m and radius = 9m is | 3138 m^3 | volume_cone | `maxRadius=20` `maxHeight=50` `unit='m'`  |
-| 49 | [Fourth Angle of Quadrilateral](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py) | Fourth angle of quadrilateral with angles 43 , 171, 40 = | 106 | fourth_angle_of_quadrilateral | `maxAngle=180`  |
-| 57 | [Trigonometric Values](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/basic_trigonometry.py) | What is cos(90)? | 0 | basic_trigonometry | `angles=[0, 30, 45, 60, 90]` `functions=['sin', 'cos', 'tan']`  |
-| 58 | [Sum of Angles of Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sum_of_polygon_angles.py) | Sum of angles of polygon with 8 sides =  | 1080 | sum_of_polygon_angles | `maxSides=12`  |
-| 60 | [Surface Area of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_sphere.py) | Surface area of Sphere with radius = 11m is | 1520.5308443374597 m^2 | surface_area_sphere | `maxSide=20` `unit='m'`  |
-| 61 | [Volume of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_sphere.py) | Volume of sphere with radius 71 m =  | 1499214.0909853019 m^3 | volume_sphere | `maxRadius=100`  |
-| 70 | [Angle between 2 vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_btw_vectors.py) | angle between the vectors [313.53, 145.92, 865.52, 575.29, 397.71, 201.66, 322.34, 126.51, 899.2, 45.11, 230.29, 927.09, 354.67] and [663.26, 671.39, 637.09, 283.77, 846.59, 345.77, 127.24, 22.2, 287.33, 758.54, 141.04, 326.26, 986.76] is: | 0.84 radians | angle_btw_vectors | `maxEltAmt=20`  |
-| 75 | [Area of a Sector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sector_area.py) | Given radius, 44 and angle, 119. Find the area of the sector. | Area of sector = 2010.47967 | sector_area | `maxRadius=49` `maxAngle=359`  |
-| 86 | [Degrees to Radians](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/degree_to_rad.py) | Angle 241 in radians is =  | 4.21 | degree_to_rad | `max_deg=360`  |
+| 18 | [Area of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_triangle.py) | Area of triangle with side lengths: 8 4 6 =  | 11.62 | area_of_triangle | `maxA=20` `maxB=20`  |
+| 19 | [Triangle exists check](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/valid_triangle.py) | Does triangle with sides 3, 48 and 23 exist? | No | valid_triangle | `maxSideLength=50`  |
+| 22 | [Third Angle of Triangle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/third_angle_of_triangle.py) | Third angle of triangle with angles 37 and 79 =  | 64 | third_angle_of_triangle | `maxAngle=89`  |
+| 25 | [Pythagorean Theorem](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/pythagorean_theorem.py) | The hypotenuse of a right triangle given the other two lengths 7 and 3 =  | 7.62 | pythagorean_theorem | `maxLength=20`  |
+| 29 | [Angle of a Regular Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_regular_polygon.py) | Find the angle of a regular polygon with 18 sides | 160.0 | angle_regular_polygon | `minVal=3` `maxVal=20`  |
+| 32 | [Surface Area of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cube.py) | Surface area of cube with side = 16m is | 1536 m^2 | surface_area_cube | `maxSide=20` `unit='m'`  |
+| 33 | [Surface Area of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cuboid.py) | Surface area of cuboid with sides = 14m, 3m, 18m is | 696 m^2 | surface_area_cuboid | `maxSide=20` `unit='m'`  |
+| 34 | [Surface Area of Cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cylinder.py) | Surface area of cylinder with height = 2m and radius = 2m is | 50 m^2 | surface_area_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'`  |
+| 35 | [Volume of Cube](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cube.py) | Volume of cube with side = 12m is | 1728 m^3 | volume_cube | `maxSide=20` `unit='m'`  |
+| 36 | [Volume of Cuboid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cuboid.py) | Volume of cuboid with sides = 12m, 11m, 10m is | 1320 m^3 | volume_cuboid | `maxSide=20` `unit='m'`  |
+| 37 | [Volume of cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cylinder.py) | Volume of cylinder with height = 25m and radius = 18m is | 25446 m^3 | volume_cylinder | `maxRadius=20` `maxHeight=50` `unit='m'`  |
+| 38 | [Surface Area of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_cone.py) | Surface area of cone with height = 2m and radius = 12m is | 911 m^2 | surface_area_cone | `maxRadius=20` `maxHeight=50` `unit='m'`  |
+| 39 | [Volume of cone](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_cone.py) | Volume of cone with height = 25m and radius = 11m is | 3167 m^3 | volume_cone | `maxRadius=20` `maxHeight=50` `unit='m'`  |
+| 49 | [Fourth Angle of Quadrilateral](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py) | Fourth angle of quadrilateral with angles 98 , 38, 15 = | 209 | fourth_angle_of_quadrilateral | `maxAngle=180`  |
+| 57 | [Trigonometric Values](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/basic_trigonometry.py) | What is tan(60)? | √3 | basic_trigonometry | `angles=[0, 30, 45, 60, 90]` `functions=['sin', 'cos', 'tan']`  |
+| 58 | [Sum of Angles of Polygon](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sum_of_polygon_angles.py) | Sum of angles of polygon with 4 sides =  | 360 | sum_of_polygon_angles | `maxSides=12`  |
+| 60 | [Surface Area of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_sphere.py) | Surface area of Sphere with radius = 15m is | 2827.4333882308138 m^2 | surface_area_sphere | `maxSide=20` `unit='m'`  |
+| 61 | [Volume of Sphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_sphere.py) | Volume of sphere with radius 74 m =  | 1697398.3219443604 m^3 | volume_sphere | `maxRadius=100`  |
+| 70 | [Angle between 2 vectors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/angle_btw_vectors.py) | angle between the vectors [415.62, 687.72, 239.91, 870.78, 127.29, 911.51, 534.49, 646.85, 347.39] and [705.5, 491.92, 634.77, 338.27, 249.11, 600.92, 272.22, 675.23, 798.99] is: | 0.57 radians | angle_btw_vectors | `maxEltAmt=20`  |
+| 75 | [Area of a Sector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/sector_area.py) | Given radius, 46 and angle, 245. Find the area of the sector. | Area of sector = 4524.06795 | sector_area | `maxRadius=49` `maxAngle=359`  |
+| 86 | [Degrees to Radians](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/degree_to_rad.py) | Angle 168 in radians is =  | 2.93 | degree_to_rad | `max_deg=360`  |
 | 87 | [Radians to Degrees](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/radian_to_deg.py) | Angle 1 in degrees is =  | 57.3 | radian_to_deg | `max_rad=3`  |
-| 95 | [Curved surface area of a cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py) | What is the curved surface area of a cylinder of radius, 12 and height, 17? | CSA of cylinder = 1281.77 | curved_surface_area_cylinder | `maxRadius=49` `maxHeight=99`  |
-| 96 | [Perimeter of Polygons](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/perimeter_of_polygons.py) | The perimeter of a 9 sided polygon with lengths of [9, 38, 9, 30, 102, 64, 30, 91, 51]cm is:  | 424 | perimeter_of_polygons | `maxSides=12` `maxLength=120`  |
-| 104 | [Circumference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/circumference.py) | Circumference of circle with radius 65 | 408.4070449666731 | circumference | `maxRadius=100`  |
-| 108 | [Arc length of Angle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/arc_length.py) | Given radius, 48 and angle, 129. Find the arc length of the angle. | Arc length of the angle = 108.07079 | arc_length | `maxRadius=49` `maxAngle=359`  |
-| 112 | [Area of Circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle.py) | Area of circle with radius 67 | 14108.285714285714 | area_of_circle | `maxRadius=100`  |
-| 113 | [Volume of frustum](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_frustum.py) | Volume of frustum with height = 29m and r1 = 1m is and r2 = 1m is  | 941.0 m^3 | volume_frustum | `maxR1=20` `maxR2=20` `maxHeight=50` `unit='m'`  |
-| 114 | [Equation of line from two points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py) | What is the equation of the line between points (19,-1) and (15,-3) in slope-intercept form? | 2y = x -21 | equation_of_line_from_two_points | `maxCoordinate=20` `minCoordinate=-20`  |
-| 115 | [Area of Circle given center and a point on circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py) | Area of circle with center (4,0) and passing through (7.779999999999999, 5.89) is | 153.94 | area_of_circle_given_center_and_point | `maxCoordinate = 10` `maxRadius=10`  |
-| 117 | [Volume of Hemisphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_hemisphere.py) | Volume of hemisphere with radius 21 m =  | 19396.193 m^3 | volume_hemisphere | `maxRadius=100`  |
-| 122 | [Volume of pyramid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_pyramid.py) | Volume of pyramid with base length = 17 m, base width = 3 m and height = 2 m is | 34.0 m^3 | volume_pyramid | `maxLength=20` `maxWidth=20` `maxHeight=50` `unit='m'`  |
-| 123 | [Surface area of pyramid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_pyramid.py) | Surface area of pyramid with base length = 52m, base width = 52m, and height = 24m | 3744 m^2 | surface_area_pyramid | `unit='m'`  |
+| 95 | [Curved surface area of a cylinder](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py) | What is the curved surface area of a cylinder of radius, 29 and height, 69? | CSA of cylinder = 12572.65 | curved_surface_area_cylinder | `maxRadius=49` `maxHeight=99`  |
+| 96 | [Perimeter of Polygons](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/perimeter_of_polygons.py) | The perimeter of a 9 sided polygon with lengths of [3, 100, 108, 49, 101, 99, 30, 88, 108]cm is:  | 686 | perimeter_of_polygons | `maxSides=12` `maxLength=120`  |
+| 104 | [Circumference](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/circumference.py) | Circumference of circle with radius 98 | 615.7521601035994 | circumference | `maxRadius=100`  |
+| 108 | [Arc length of Angle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/arc_length.py) | Given radius, 33 and angle, 353. Find the arc length of the angle. | Arc length of the angle = 203.31340 | arc_length | `maxRadius=49` `maxAngle=359`  |
+| 112 | [Area of Circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle.py) | Area of circle with radius 47 | 6942.571428571429 | area_of_circle | `maxRadius=100`  |
+| 113 | [Volume of frustum](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_frustum.py) | Volume of frustum with height = 3m and r1 = 7m is and r2 = 7m is  | 461.0 m^3 | volume_frustum | `maxR1=20` `maxR2=20` `maxHeight=50` `unit='m'`  |
+| 114 | [Equation of line from two points](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py) | What is the equation of the line between points (-17,-4) and (-8,19) in slope-intercept form? | 9y = 23x + 355 | equation_of_line_from_two_points | `maxCoordinate=20` `minCoordinate=-20`  |
+| 115 | [Area of Circle given center and a point on circle](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py) | Area of circle with center (10,-6) and passing through (2.0, -6.0) is | 201.06 | area_of_circle_given_center_and_point | `maxCoordinate = 10` `maxRadius=10`  |
+| 117 | [Volume of Hemisphere](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_hemisphere.py) | Volume of hemisphere with radius 7 m =  | 718.378 m^3 | volume_hemisphere | `maxRadius=100`  |
+| 122 | [Volume of pyramid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/volume_pyramid.py) | Volume of pyramid with base length = 4 m, base width = 8 m and height = 24 m is | 256.0 m^3 | volume_pyramid | `maxLength=20` `maxWidth=20` `maxHeight=50` `unit='m'`  |
+| 123 | [Surface area of pyramid](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/geometry/surface_area_pyramid.py) | Surface area of pyramid with base length = 10m, base width = 24m, and height = 13m | 480 m^2 | surface_area_pyramid | `unit='m'`  |
 ## misc
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 9 | [LCM (Least Common Multiple)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/lcm.py) | LCM of 17 and 10 = | 170 | lcm | `maxVal=20`  |
-| 10 | [GCD (Greatest Common Denominator)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/gcd.py) | GCD of 10 and 3 =  | 1 | gcd | `maxVal=20`  |
-| 27 | [Prime Factorisation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/prime_factors.py) | Find prime factors of 72 | [2, 2, 2, 3, 3] | prime_factors | `minVal=1` `maxVal=200`  |
-| 40 | [Common Factors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/common_factors.py) | Common Factors of 24 and 36 =  | [1, 2, 3, 4, 6, 12] | common_factors | `maxVal=100`  |
-| 51 | [HCF (Highest Common Factor)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/hcf.py) | HCF of 5 and 1 =  | 1 | hcf | `maxVal=20`  |
-| 55 | [Comparing surds](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/surds_comparison.py) | Fill in the blanks 80^(1/4) _ 10^(1/7) | > | surds_comparison | `maxValue=100` `maxRoot=10`  |
-| 63 | [Profit or Loss Percent](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/profit_loss_percent.py) | Profit percent when CP = 314 and SP = 358 is:  | 14.012738853503185 | profit_loss_percent | `maxCP=1000` `maxSP=1000`  |
-| 66 | [Geometric Progression](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_progression.py) | For the given GP [4, 28, 196, 1372, 9604, 67228] ,Find the value of a,common ratio,8th term value, sum upto 10th term | The value of a is 4, common ratio is 7 , 8th term is 3294172 , sum upto 10th term is 188316832.0 | geometric_progression | `number_values=6` `min_value=2` `max_value=12` `n_term=7` `sum_term=5`  |
-| 67 | [Geometric Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_mean.py) | Geometric mean of 3 numbers 43 , 73 and 2 =  | (43*73*2)^(1/3) = 18.44762395255555 | geometric_mean | `maxValue=100` `maxNum=4`  |
-| 68 | [Harmonic Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/harmonic_mean.py) | Harmonic mean of 4 numbers 80 , 79 , 74 , 78 =  |  4/((1/80) + (1/79) + (1/74) + (1/78)) = 77.6815865518732 | harmonic_mean | `maxValue=100` `maxNum=4`  |
-| 69 | [Euclidian norm or L2 norm of a vector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/euclidian_norm.py) | Euclidian norm or L2 norm of the vector[86.58156338792955, 165.0561703332688, 492.72813194295276, 781.1275671824076, 350.2592897058979, 595.3141574403849, 980.9590499170994, 765.0348165196015, 496.4518614259873, 834.8722353149475, 194.45844826499703] is: | 1973.223460988261 | euclidian_norm | `maxEltAmt=20`  |
-| 81 | [Celsius To Fahrenheit](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/celsius_to_fahrenheit.py) | Convert -14 degrees Celsius to degrees Fahrenheit = | 6.800000000000001 | celsius_to_fahrenheit | `maxTemp=100`  |
-| 82 | [AP Term Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_term.py) | Find the term number 87 of the AP series: 14, -75, -164 ...  | -7640 | arithmetic_progression_term | `maxd=100` `maxa=100` `maxn=100`  |
-| 83 | [AP Sum Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_sum.py) | Find the sum of first 49 terms of the AP series: 70, 166, 262 ...  | 116326.0 | arithmetic_progression_sum | `maxd=100` `maxa=100` `maxn=100`  |
-| 85 | [Converts decimal to Roman Numerals](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/decimal_to_roman_numerals.py) | The number 0 in Roman Numerals is:  | MCMXXXI | decimal_to_roman_numerals | `maxDecimal=4000`  |
-| 92 | [Complex To Polar Form](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/complex_to_polar.py) | 16.76(-5.0theta + i-16.0theta) | -1.87 | complex_to_polar | `minRealImaginaryNum=-20, maxRealImaginaryNum=20`  |
-| 93 | [Union,Intersection,Difference of Two Sets](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/set_operation.py) | Given the two sets a={9, 3, 6, 1} ,b={8, 5, 6, 7}.Find the Union,intersection,a-b,b-a and symmetric difference | Union is {1, 3, 5, 6, 7, 8, 9},Intersection is {6}, a-b is {9, 3, 1},b-a is {8, 5, 7}, Symmetric difference is {1, 3, 5, 7, 8, 9} | set_operation | `minval=3` `maxval=7` `n_a=4` `n_b=5`  |
-| 94 | [Base Conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/base_conversion.py) | Convert 21421 from base 10 to base 7. | 116311 | base_conversion | `maxNum=60000` `maxBase=16`  |
-| 98 | [Quotient of Powers with Same Base](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_base.py) | The Quotient of 37^1 and 37^7 = 37^(1-7) = 37^-6 | 3.897531695087292e-10 | quotient_of_power_same_base | `maxBase=50` `maxPower=10`  |
-| 99 | [Quotient of Powers with Same Power](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_power.py) | The Quotient of 6^4 and 29^4 = (6/29)^4 = 0.20689655172413793^4 | 0.0018323693129039236 | quotient_of_power_same_power | `maxBase=50` `maxPower=10`  |
-| 101 | [Leap Year or Not](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/is_leap_year.py) | Year 2073  | is not a leap year | is_leap_year | `minNumber=1900` `maxNumber=2099`  |
-| 102 | [Minute to Hour conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/minutes_to_hours.py) | Convert 905 minutes to Hours & Minutes | 15 hours and 5 minutes | minutes_to_hours | `maxMinutes=999`  |
-| 106 | [signum function](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/signum_function.py) | signum of 316 is = | 1 | signum_function | `min=-999` `max=999`  |
-| 109 | [Binomial distribution](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/binomial_distribution.py) | A manufacturer of metal pistons finds that, on average, 32.85% of the pistons they manufacture are rejected because they are incorrectly sized. What is the probability that a batch of 13 pistons will contain no more than 5 rejected pistons? | 77.05 | binomial_distribution | ``  |
-| 116 | [Factors of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/Factors.py) | Factors of 860 =  | [1, 2, 4, 5, 10, 20, 43, 86, 172, 215, 430, 860] | Factors | `maxVal=1000`  |
-| 121 | [Product of scientific notations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/product_of_scientific_notations.py) | Product of scientific notations 9.64x10^-53 and 6.53x10^-8 =  | 6.29x10^-60 | product_of_scientific_notations | `minExpVal=-100` `maxExpVal=100`  |
+| 9 | [LCM (Least Common Multiple)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/lcm.py) | LCM of 7 and 20 = | 140 | lcm | `maxVal=20`  |
+| 10 | [GCD (Greatest Common Denominator)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/gcd.py) | GCD of 16 and 2 =  | 2 | gcd | `maxVal=20`  |
+| 27 | [Prime Factorisation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/prime_factors.py) | Find prime factors of 13 | [13] | prime_factors | `minVal=1` `maxVal=200`  |
+| 40 | [Common Factors](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/common_factors.py) | Common Factors of 58 and 85 =  | [1] | common_factors | `maxVal=100`  |
+| 51 | [HCF (Highest Common Factor)](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/hcf.py) | HCF of 15 and 13 =  | 1 | hcf | `maxVal=20`  |
+| 55 | [Comparing surds](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/surds_comparison.py) | Fill in the blanks 52^(1/6) _ 49^(1/9) | > | surds_comparison | `maxValue=100` `maxRoot=10`  |
+| 63 | [Profit or Loss Percent](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/profit_loss_percent.py) | Loss percent when CP = 899 and SP = 190 is:  | 78.86540600667408 | profit_loss_percent | `maxCP=1000` `maxSP=1000`  |
+| 66 | [Geometric Progression](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_progression.py) | For the given GP [7, 35, 175, 875, 4375, 21875] ,Find the value of a,common ratio,6th term value, sum upto 9th term | The value of a is 7, common ratio is 5 , 6th term is 21875 , sum upto 9th term is 3417967.0 | geometric_progression | `number_values=6` `min_value=2` `max_value=12` `n_term=7` `sum_term=5`  |
+| 67 | [Geometric Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/geometric_mean.py) | Geometric mean of 2 numbers 85 and 45 =  | (85*45)^(1/2) = 61.84658438426491 | geometric_mean | `maxValue=100` `maxNum=4`  |
+| 68 | [Harmonic Mean of N Numbers](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/harmonic_mean.py) | Harmonic mean of 3 numbers 12 , 39 and 76 =  |  3/((1/12) + (1/39) + (1/76)) = 24.56353591160221 | harmonic_mean | `maxValue=100` `maxNum=4`  |
+| 69 | [Euclidian norm or L2 norm of a vector](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/euclidian_norm.py) | Euclidian norm or L2 norm of the vector[994.7263200922915, 971.6812595950137, 51.85289296192064, 526.1757082313851, 51.16775130159046, 488.76324739869983, 896.5928964376717] is: | 1805.1540081935675 | euclidian_norm | `maxEltAmt=20`  |
+| 81 | [Celsius To Fahrenheit](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/celsius_to_fahrenheit.py) | Convert 91 degrees Celsius to degrees Fahrenheit = | 195.8 | celsius_to_fahrenheit | `maxTemp=100`  |
+| 82 | [AP Term Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_term.py) | Find the term number 7 of the AP series: 3, -28, -59 ...  | -183 | arithmetic_progression_term | `maxd=100` `maxa=100` `maxn=100`  |
+| 83 | [AP Sum Calculation](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/arithmetic_progression_sum.py) | Find the sum of first 70 terms of the AP series: 53, 70, 87 ...  | 44765.0 | arithmetic_progression_sum | `maxd=100` `maxa=100` `maxn=100`  |
+| 85 | [Converts decimal to Roman Numerals](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/decimal_to_roman_numerals.py) | The number 0 in Roman Numerals is:  | MCCLXXVII | decimal_to_roman_numerals | `maxDecimal=4000`  |
+| 92 | [Complex To Polar Form](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/complex_to_polar.py) | 18.44(-12.0theta + i-14.0theta) | -2.28 | complex_to_polar | `minRealImaginaryNum=-20, maxRealImaginaryNum=20`  |
+| 93 | [Union,Intersection,Difference of Two Sets](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/set_operation.py) | Given the two sets a={2, 10, 5} ,b={1, 5, 6, 8, 9}.Find the Union,intersection,a-b,b-a and symmetric difference | Union is {1, 2, 5, 6, 8, 9, 10},Intersection is {5}, a-b is {2, 10},b-a is {8, 1, 6, 9}, Symmetric difference is {1, 2, 6, 8, 9, 10} | set_operation | `minval=3` `maxval=7` `n_a=4` `n_b=5`  |
+| 94 | [Base Conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/base_conversion.py) | Convert 1A1A9 from base 12 to base 2. | 1001010110010001 | base_conversion | `maxNum=60000` `maxBase=16`  |
+| 98 | [Quotient of Powers with Same Base](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_base.py) | The Quotient of 10^6 and 10^9 = 10^(6-9) = 10^-3 | 0.001 | quotient_of_power_same_base | `maxBase=50` `maxPower=10`  |
+| 99 | [Quotient of Powers with Same Power](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/quotient_of_power_same_power.py) | The Quotient of 16^5 and 18^5 = (16/18)^5 = 0.8888888888888888^5 | 0.5549289573066435 | quotient_of_power_same_power | `maxBase=50` `maxPower=10`  |
+| 101 | [Leap Year or Not](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/is_leap_year.py) | Year 1910  | is not a leap year | is_leap_year | `minNumber=1900` `maxNumber=2099`  |
+| 102 | [Minute to Hour conversion](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/minutes_to_hours.py) | Convert 614 minutes to Hours & Minutes | 10 hours and 14 minutes | minutes_to_hours | `maxMinutes=999`  |
+| 106 | [signum function](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/signum_function.py) | signum of -726 is = | -1 | signum_function | `min=-999` `max=999`  |
+| 109 | [Binomial distribution](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/binomial_distribution.py) | A manufacturer of metal pistons finds that, on average, 32.46% of the pistons they manufacture are rejected because they are incorrectly sized. What is the probability that a batch of 19 pistons will contain no more than 6 rejected pistons? | 57.56 | binomial_distribution | ``  |
+| 116 | [Factors of a number](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/Factors.py) | Factors of 900 =  | [1, 2, 3, 4, 5, 6, 9, 10, 12, 15, 18, 20, 25, 30, 36, 45, 50, 60, 75, 90, 100, 150, 180, 225, 300, 450, 900] | Factors | `maxVal=1000`  |
+| 121 | [Product of scientific notaions](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/misc/product_of_scientific_notations.py) | Product of scientific notations 7.84x10^60 and 5.05x10^5 =  | 3.96x10^66 | product_of_scientific_notations | `minExpVal=-100` `maxExpVal=100`  |
 ## statistics
 | Id   | Skill | Example problem | Example Solution | Function Name | Kwargs |
 |------|-------|-----------------|------------------|---------------|--------|
-| 30 | [Combinations of Objects](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/combinations.py) | Number of combinations from 11 objects picked 8 at a time  | 165 | combinations | `maxlength=20`  |
-| 42 | [Permutations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/permutation.py) | Number of Permutations from 15 objects picked 2 at a time =   | 210 | permutation | `maxlength=20`  |
-| 52 | [Probability of a certain sum appearing on faces of dice](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/dice_sum_probability.py) | If 2 dice are rolled at the same time, the probability of getting a sum of 10 = | 3/36 | dice_sum_probability | `maxDice=3`  |
-| 54 | [Confidence interval For sample S](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/confidence_interval.py) | The confidence interval for sample [211, 207, 299, 261, 279, 291, 237, 288, 292, 268, 260, 290, 283, 213, 251, 209, 269, 266, 295, 232, 228, 224, 205, 235, 208, 214, 254, 255, 284, 267, 227, 241, 280, 233, 212] with 99% confidence is | (263.70301611669476, 237.32555531187666) | confidence_interval | ``  |
-| 59 | [Mean,Standard Deviation,Variance](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/data_summary.py) | Find the mean,standard deviation and variance for the data[39, 39, 27, 18, 40, 27, 33, 41, 13, 50, 22, 5, 11, 15, 35] | The Mean is 27.666666666666668 , Standard Deviation is 164.0888888888889, Variance is 12.809718532773813 | data_summary | `number_values=15` `minval=5` `maxval=50`  |
-| 76 | [Mean and Median](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/mean_median.py) | Given the series of numbers [22, 27, 33, 35, 36, 42, 45, 47, 52, 83]. find the arithmatic mean and mdian of the series | Arithmetic mean of the series is 42.2 and Arithmetic median of this series is 39.0 | mean_median | `maxlen=10`  |
-| 107 | [Conditional Probability](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/conditional_probability.py) | Someone tested positive for a nasty disease which only 1.87% of population have. Test sensitivity (true positive) is equal to SN= 94.26% whereas test specificity (true negative) SP= 99.52%. What is the probability that this guy really has that disease? | 78.91% | conditional_probability | ``  |
+| 30 | [Combinations of Objects](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/combinations.py) | Number of combinations from 15 objects picked 3 at a time  | 455 | combinations | `maxlength=20`  |
+| 42 | [Permutations](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/permutation.py) | Number of Permutations from 18 objects picked 6 at a time =   | 13366080 | permutation | `maxlength=20`  |
+| 52 | [Probability of a certain sum appearing on faces of dice](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/dice_sum_probability.py) | If 2 dice are rolled at the same time, the probability of getting a sum of 2 = | 1/36 | dice_sum_probability | `maxDice=3`  |
+| 54 | [Confidence interval For sample S](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/confidence_interval.py) | The confidence interval for sample [257, 235, 281, 246, 292, 284, 214, 244, 229, 220, 279, 275, 239, 282, 211, 256, 269, 204, 212, 271, 249, 264, 267, 200, 251, 258, 298, 252, 210] with 90% confidence is | (258.442496139615, 241.4885383431436) | confidence_interval | ``  |
+| 59 | [Mean,Standard Deviation,Variance](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/data_summary.py) | Find the mean,standard deviation and variance for the data[26, 28, 15, 9, 21, 23, 5, 41, 7, 50, 33, 42, 24, 39, 11] | The Mean is 24.933333333333334 , Standard Deviation is 182.46222222222224, Variance is 13.50785779545455 | data_summary | `number_values=15` `minval=5` `maxval=50`  |
+| 76 | [Mean and Median](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/mean_median.py) | Given the series of numbers [1, 7, 9, 17, 23, 30, 64, 74, 79, 85]. find the arithmatic mean and mdian of the series | Arithmetic mean of the series is 38.9 and Arithmetic median of this series is 26.5 | mean_median | `maxlen=10`  |
+| 107 | [Conditional Probability](https://github.com/lukew3/mathgenerator/blob/main/mathgenerator/funcs/statistics/conditional_probability.py) | Someone tested positive for a nasty disease which only 1.13% of population have. Test sensitivity (true positive) is equal to SN= 92.22% whereas test specificity (true negative) SP= 91.47%. What is the probability that this guy really has that disease? | 11.0% | conditional_probability | ``  |
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 47d5837b..7b09b597 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -3,6 +3,5 @@ hypothesis
 flake8
 autopep8
 sympy
-numpy
 scipy
 worksheetgen
diff --git a/mathgenerator/__init__.py b/mathgenerator/__init__.py
index 427694a1..4e562cc4 100644
--- a/mathgenerator/__init__.py
+++ b/mathgenerator/__init__.py
@@ -1,11 +1,6 @@
 import os
-import sys
 import traceback
 
-import random
-import sympy
-import numpy
-import scipy
 
 genList = []
 
diff --git a/mathgenerator/funcs/algebra/__init__.py b/mathgenerator/funcs/algebra/__init__.py
index 2cb11ca5..caf42dc4 100644
--- a/mathgenerator/funcs/algebra/__init__.py
+++ b/mathgenerator/funcs/algebra/__init__.py
@@ -1,23 +1,23 @@
 from ...__init__ import *
 
-from .basic_algebra import *
-from .combine_like_terms import *
-from .complex_quadratic import *
-from .compound_interest import *
-from .distance_two_points import *
-from .expanding import *
-from .factoring import *
-from .int_matrix_22_determinant import *
-from .intersection_of_two_lines import *
-from .invert_matrix import *
-from .linear_equations import *
-from .log import *
-from .matrix_multiplication import *
-from .midpoint_of_two_points import *
-from .multiply_complex_numbers import *
-from .multiply_int_to_22_matrix import *
-from .quadratic_equation import *
-from .simple_interest import *
-from .system_of_equations import *
-from .vector_cross import *
-from .vector_dot import *
+from .basic_algebra import basic_algebra
+from .combine_like_terms import combine_like_terms
+from .complex_quadratic import complex_quadratic
+from .compound_interest import compound_interest
+from .distance_two_points import distance_two_points
+from .expanding import expanding
+from .factoring import factoring
+from .int_matrix_22_determinant import int_matrix_22_determinant
+from .intersection_of_two_lines import intersection_of_two_lines
+from .invert_matrix import invert_matrix
+from .linear_equations import linear_equations
+from .log import log
+from .matrix_multiplication import matrix_multiplication
+from .midpoint_of_two_points import midpoint_of_two_points
+from .multiply_complex_numbers import multiply_complex_numbers
+from .multiply_int_to_22_matrix import multiply_int_to_22_matrix
+from .quadratic_equation import quadratic_equation
+from .simple_interest import simple_interest
+from .system_of_equations import system_of_equations
+from .vector_cross import vector_cross
+from .vector_dot import vector_dot
diff --git a/mathgenerator/funcs/algebra/basic_algebra.py b/mathgenerator/funcs/algebra/basic_algebra.py
index f2a72027..419b54fe 100644
--- a/mathgenerator/funcs/algebra/basic_algebra.py
+++ b/mathgenerator/funcs/algebra/basic_algebra.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVariable=10, format='string'):
diff --git a/mathgenerator/funcs/algebra/combine_like_terms.py b/mathgenerator/funcs/algebra/combine_like_terms.py
index f5ca8379..521095a5 100644
--- a/mathgenerator/funcs/algebra/combine_like_terms.py
+++ b/mathgenerator/funcs/algebra/combine_like_terms.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxCoef=10, maxExp=20, maxTerms=10, format='string'):
diff --git a/mathgenerator/funcs/algebra/complex_quadratic.py b/mathgenerator/funcs/algebra/complex_quadratic.py
index f09af5c6..a5d48b87 100644
--- a/mathgenerator/funcs/algebra/complex_quadratic.py
+++ b/mathgenerator/funcs/algebra/complex_quadratic.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(prob_type=0, max_range=10, format='string'):
diff --git a/mathgenerator/funcs/algebra/compound_interest.py b/mathgenerator/funcs/algebra/compound_interest.py
index 9826fef4..d6f919b3 100644
--- a/mathgenerator/funcs/algebra/compound_interest.py
+++ b/mathgenerator/funcs/algebra/compound_interest.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxPrinciple=10000,
diff --git a/mathgenerator/funcs/algebra/distance_two_points.py b/mathgenerator/funcs/algebra/distance_two_points.py
index be1e9021..34ca61fd 100644
--- a/mathgenerator/funcs/algebra/distance_two_points.py
+++ b/mathgenerator/funcs/algebra/distance_two_points.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValXY=20, minValXY=-20, format='string'):
diff --git a/mathgenerator/funcs/algebra/expanding.py b/mathgenerator/funcs/algebra/expanding.py
index 4bf869d4..339c46dc 100644
--- a/mathgenerator/funcs/algebra/expanding.py
+++ b/mathgenerator/funcs/algebra/expanding.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(range_x1=10,
diff --git a/mathgenerator/funcs/algebra/factoring.py b/mathgenerator/funcs/algebra/factoring.py
index 1baaed86..239d8d31 100644
--- a/mathgenerator/funcs/algebra/factoring.py
+++ b/mathgenerator/funcs/algebra/factoring.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(range_x1=10, range_x2=10, format='string'):
diff --git a/mathgenerator/funcs/algebra/int_matrix_22_determinant.py b/mathgenerator/funcs/algebra/int_matrix_22_determinant.py
index 00e97953..5a12efe1 100644
--- a/mathgenerator/funcs/algebra/int_matrix_22_determinant.py
+++ b/mathgenerator/funcs/algebra/int_matrix_22_determinant.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxMatrixVal=100, format='string'):
diff --git a/mathgenerator/funcs/algebra/intersection_of_two_lines.py b/mathgenerator/funcs/algebra/intersection_of_two_lines.py
index 8bb42c22..2b89fed9 100644
--- a/mathgenerator/funcs/algebra/intersection_of_two_lines.py
+++ b/mathgenerator/funcs/algebra/intersection_of_two_lines.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import fractions
 
 
diff --git a/mathgenerator/funcs/algebra/invert_matrix.py b/mathgenerator/funcs/algebra/invert_matrix.py
index 468ec06a..e5c2d704 100644
--- a/mathgenerator/funcs/algebra/invert_matrix.py
+++ b/mathgenerator/funcs/algebra/invert_matrix.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 import sympy
 
 
diff --git a/mathgenerator/funcs/algebra/linear_equations.py b/mathgenerator/funcs/algebra/linear_equations.py
index 7955c7af..951a01e7 100644
--- a/mathgenerator/funcs/algebra/linear_equations.py
+++ b/mathgenerator/funcs/algebra/linear_equations.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(n=2, varRange=20, coeffRange=20, format='string'):
diff --git a/mathgenerator/funcs/algebra/log.py b/mathgenerator/funcs/algebra/log.py
index 26d00aa9..930965df 100644
--- a/mathgenerator/funcs/algebra/log.py
+++ b/mathgenerator/funcs/algebra/log.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxBase=3, maxVal=8, format='string'):
diff --git a/mathgenerator/funcs/algebra/matrix_multiplication.py b/mathgenerator/funcs/algebra/matrix_multiplication.py
index 03445199..29bfb129 100644
--- a/mathgenerator/funcs/algebra/matrix_multiplication.py
+++ b/mathgenerator/funcs/algebra/matrix_multiplication.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=100, max_dim=10, format='string'):
diff --git a/mathgenerator/funcs/algebra/midpoint_of_two_points.py b/mathgenerator/funcs/algebra/midpoint_of_two_points.py
index 2f8dbcac..73e54efc 100644
--- a/mathgenerator/funcs/algebra/midpoint_of_two_points.py
+++ b/mathgenerator/funcs/algebra/midpoint_of_two_points.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=20, format='string'):
@@ -19,5 +20,5 @@ def gen_func(maxValue=20, format='string'):
         return x1, y1, x2, y2, xm, ym
 
 
-midPoint_of_two_points = Generator("Midpoint of the two point", 20,
+midpoint_of_two_points = Generator("Midpoint of the two point", 20,
                                    gen_func, ["maxValue=20"])
diff --git a/mathgenerator/funcs/algebra/multiply_complex_numbers.py b/mathgenerator/funcs/algebra/multiply_complex_numbers.py
index 1c9e7122..c94b5390 100644
--- a/mathgenerator/funcs/algebra/multiply_complex_numbers.py
+++ b/mathgenerator/funcs/algebra/multiply_complex_numbers.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minRealImaginaryNum=-20,
diff --git a/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py b/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py
index d7fa9970..b16c077b 100644
--- a/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py
+++ b/mathgenerator/funcs/algebra/multiply_int_to_22_matrix.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxMatrixVal=10, maxRes=100, format='string'):
diff --git a/mathgenerator/funcs/algebra/quadratic_equation.py b/mathgenerator/funcs/algebra/quadratic_equation.py
index f98ceed0..d53ee139 100644
--- a/mathgenerator/funcs/algebra/quadratic_equation.py
+++ b/mathgenerator/funcs/algebra/quadratic_equation.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/algebra/simple_interest.py b/mathgenerator/funcs/algebra/simple_interest.py
index 12b8a7e1..5de696b3 100644
--- a/mathgenerator/funcs/algebra/simple_interest.py
+++ b/mathgenerator/funcs/algebra/simple_interest.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxPrinciple=10000,
diff --git a/mathgenerator/funcs/algebra/system_of_equations.py b/mathgenerator/funcs/algebra/system_of_equations.py
index 92ebef93..fc686bac 100644
--- a/mathgenerator/funcs/algebra/system_of_equations.py
+++ b/mathgenerator/funcs/algebra/system_of_equations.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(range_x=10,
diff --git a/mathgenerator/funcs/algebra/vector_cross.py b/mathgenerator/funcs/algebra/vector_cross.py
index 241e30c5..b6c03a5c 100644
--- a/mathgenerator/funcs/algebra/vector_cross.py
+++ b/mathgenerator/funcs/algebra/vector_cross.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minVal=-20, maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/algebra/vector_dot.py b/mathgenerator/funcs/algebra/vector_dot.py
index 227d69ff..d1b18176 100644
--- a/mathgenerator/funcs/algebra/vector_dot.py
+++ b/mathgenerator/funcs/algebra/vector_dot.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minVal=-20, maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/basic_math/__init__.py b/mathgenerator/funcs/basic_math/__init__.py
index c003f1cf..b2ba76d9 100644
--- a/mathgenerator/funcs/basic_math/__init__.py
+++ b/mathgenerator/funcs/basic_math/__init__.py
@@ -1,22 +1,23 @@
 from ...__init__ import *
 
-from .absolute_difference import *
-from .addition import *
-from .compare_fractions import *
-from .complex_division import *
-from .cube_root import *
-from .divide_fractions import *
-from .division import *
-from .exponentiation import *
-from .factorial import *
-from .fraction_multiplication import *
-from .greatest_common_divisor import *
-from .is_prime import *
-from .multiplication import *
-from .percentage import *
-from .percentage_difference import *
-from .percentage_error import *
-from .power_of_powers import *
-from .square import *
-from .square_root import *
-from .subtraction import *
+from .absolute_difference import absolute_difference
+from .addition import addition
+from .compare_fractions import compare_fractions
+from .complex_division import complex_division
+from .cube_root import cube_root
+from .divide_fractions import divide_fractions
+from .division import division
+from .exponentiation import exponentiation
+from .factorial import factorial
+from .fraction_multiplication import fraction_multiplication
+from .greatest_common_divisor import greatest_common_divisor
+from .is_composite import is_composite
+from .is_prime import is_prime
+from .multiplication import multiplication
+from .percentage import percentage
+from .percentage_difference import percentage_difference
+from .percentage_error import percentage_error
+from .power_of_powers import power_of_powers
+from .square import square
+from .square_root import square_root
+from .subtraction import subtraction
diff --git a/mathgenerator/funcs/basic_math/absolute_difference.py b/mathgenerator/funcs/basic_math/absolute_difference.py
index a786c9f7..a1eb0ad0 100644
--- a/mathgenerator/funcs/basic_math/absolute_difference.py
+++ b/mathgenerator/funcs/basic_math/absolute_difference.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxA=100, maxB=100, format='string'):
diff --git a/mathgenerator/funcs/basic_math/addition.py b/mathgenerator/funcs/basic_math/addition.py
index af1ec85e..ba09ab43 100644
--- a/mathgenerator/funcs/basic_math/addition.py
+++ b/mathgenerator/funcs/basic_math/addition.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSum=99, maxAddend=50, format='string'):
diff --git a/mathgenerator/funcs/basic_math/compare_fractions.py b/mathgenerator/funcs/basic_math/compare_fractions.py
index 7f45f589..a5cc2524 100644
--- a/mathgenerator/funcs/basic_math/compare_fractions.py
+++ b/mathgenerator/funcs/basic_math/compare_fractions.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=10, format='string'):
diff --git a/mathgenerator/funcs/basic_math/complex_division.py b/mathgenerator/funcs/basic_math/complex_division.py
index 4f178b45..1af1138f 100644
--- a/mathgenerator/funcs/basic_math/complex_division.py
+++ b/mathgenerator/funcs/basic_math/complex_division.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxRes=99, maxDivid=99, format='string'):
diff --git a/mathgenerator/funcs/basic_math/cube_root.py b/mathgenerator/funcs/basic_math/cube_root.py
index fb942955..582e43fe 100644
--- a/mathgenerator/funcs/basic_math/cube_root.py
+++ b/mathgenerator/funcs/basic_math/cube_root.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minNo=1, maxNo=1000, format='string'):
diff --git a/mathgenerator/funcs/basic_math/divide_fractions.py b/mathgenerator/funcs/basic_math/divide_fractions.py
index fc08d910..c1c5f72d 100644
--- a/mathgenerator/funcs/basic_math/divide_fractions.py
+++ b/mathgenerator/funcs/basic_math/divide_fractions.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=10, format='string'):
diff --git a/mathgenerator/funcs/basic_math/division.py b/mathgenerator/funcs/basic_math/division.py
index e316fc90..be453d7a 100644
--- a/mathgenerator/funcs/basic_math/division.py
+++ b/mathgenerator/funcs/basic_math/division.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxA=25, maxB=25, format='string'):
diff --git a/mathgenerator/funcs/basic_math/exponentiation.py b/mathgenerator/funcs/basic_math/exponentiation.py
index 5c2a0d84..1fea6fe5 100644
--- a/mathgenerator/funcs/basic_math/exponentiation.py
+++ b/mathgenerator/funcs/basic_math/exponentiation.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxBase=20, maxExpo=10, format='string'):
diff --git a/mathgenerator/funcs/basic_math/factorial.py b/mathgenerator/funcs/basic_math/factorial.py
index 76a032ba..89351f4f 100644
--- a/mathgenerator/funcs/basic_math/factorial.py
+++ b/mathgenerator/funcs/basic_math/factorial.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxInput=6, format='string'):
diff --git a/mathgenerator/funcs/basic_math/fraction_multiplication.py b/mathgenerator/funcs/basic_math/fraction_multiplication.py
index 230e47d6..3076b3a9 100644
--- a/mathgenerator/funcs/basic_math/fraction_multiplication.py
+++ b/mathgenerator/funcs/basic_math/fraction_multiplication.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=10, format='string'):
diff --git a/mathgenerator/funcs/basic_math/is_composite.py b/mathgenerator/funcs/basic_math/is_composite.py
index d7c60d83..69d2113e 100644
--- a/mathgenerator/funcs/basic_math/is_composite.py
+++ b/mathgenerator/funcs/basic_math/is_composite.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxNum=250, format='string'):
diff --git a/mathgenerator/funcs/basic_math/is_prime.py b/mathgenerator/funcs/basic_math/is_prime.py
index c47f476f..e705bb90 100644
--- a/mathgenerator/funcs/basic_math/is_prime.py
+++ b/mathgenerator/funcs/basic_math/is_prime.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(max_num=100, format='string'):
diff --git a/mathgenerator/funcs/basic_math/multiplication.py b/mathgenerator/funcs/basic_math/multiplication.py
index 2473f5d9..e89aad83 100644
--- a/mathgenerator/funcs/basic_math/multiplication.py
+++ b/mathgenerator/funcs/basic_math/multiplication.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxMulti=12, format='string'):
diff --git a/mathgenerator/funcs/basic_math/percentage.py b/mathgenerator/funcs/basic_math/percentage.py
index 626fc98b..3c9b87ae 100644
--- a/mathgenerator/funcs/basic_math/percentage.py
+++ b/mathgenerator/funcs/basic_math/percentage.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=99, maxpercentage=99, format='string'):
diff --git a/mathgenerator/funcs/basic_math/percentage_difference.py b/mathgenerator/funcs/basic_math/percentage_difference.py
index 6adafea2..f29fe69d 100644
--- a/mathgenerator/funcs/basic_math/percentage_difference.py
+++ b/mathgenerator/funcs/basic_math/percentage_difference.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=200, minValue=0, format='string'):
diff --git a/mathgenerator/funcs/basic_math/percentage_error.py b/mathgenerator/funcs/basic_math/percentage_error.py
index 9c3e495a..c04a39d1 100644
--- a/mathgenerator/funcs/basic_math/percentage_error.py
+++ b/mathgenerator/funcs/basic_math/percentage_error.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=100, minValue=-100, format='string'):
diff --git a/mathgenerator/funcs/basic_math/power_of_powers.py b/mathgenerator/funcs/basic_math/power_of_powers.py
index 71131d3f..da6eb429 100644
--- a/mathgenerator/funcs/basic_math/power_of_powers.py
+++ b/mathgenerator/funcs/basic_math/power_of_powers.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxBase=50, maxPower=10, format='string'):
diff --git a/mathgenerator/funcs/basic_math/square.py b/mathgenerator/funcs/basic_math/square.py
index 2af255d1..57c19a31 100644
--- a/mathgenerator/funcs/basic_math/square.py
+++ b/mathgenerator/funcs/basic_math/square.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSquareNum=20, format='string'):
diff --git a/mathgenerator/funcs/basic_math/square_root.py b/mathgenerator/funcs/basic_math/square_root.py
index 60616955..7af77fd5 100644
--- a/mathgenerator/funcs/basic_math/square_root.py
+++ b/mathgenerator/funcs/basic_math/square_root.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minNo=1, maxNo=12, format='string'):
diff --git a/mathgenerator/funcs/basic_math/subtraction.py b/mathgenerator/funcs/basic_math/subtraction.py
index 91dcc1a3..a6ed94e4 100644
--- a/mathgenerator/funcs/basic_math/subtraction.py
+++ b/mathgenerator/funcs/basic_math/subtraction.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxMinuend=99, maxDiff=99, format='string'):
diff --git a/mathgenerator/funcs/calculus/__init__.py b/mathgenerator/funcs/calculus/__init__.py
index cc9b474f..82b298a7 100644
--- a/mathgenerator/funcs/calculus/__init__.py
+++ b/mathgenerator/funcs/calculus/__init__.py
@@ -1,7 +1,7 @@
 from ...__init__ import *
 
-from .definite_integral import *
-from .differentiation import *
-from .power_rule_differentiation import *
-from .power_rule_integration import *
-from .stationary_points import *
+from .definite_integral import definite_integral
+from .differentiation import differentiation
+from .power_rule_differentiation import power_rule_differentiation
+from .power_rule_integration import power_rule_integration
+from .stationary_points import stationary_points
diff --git a/mathgenerator/funcs/calculus/definite_integral.py b/mathgenerator/funcs/calculus/definite_integral.py
index 8e8c85a0..d79a9937 100644
--- a/mathgenerator/funcs/calculus/definite_integral.py
+++ b/mathgenerator/funcs/calculus/definite_integral.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-import scipy
+from ..__init__ import Generator
+import random
 from scipy.integrate import quad
 
 
diff --git a/mathgenerator/funcs/calculus/differentiation.py b/mathgenerator/funcs/calculus/differentiation.py
index 9ec010d6..74dbef5e 100644
--- a/mathgenerator/funcs/calculus/differentiation.py
+++ b/mathgenerator/funcs/calculus/differentiation.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import sympy
 
 
 def genDifferentiationProblem(diff_lvl=2):
diff --git a/mathgenerator/funcs/calculus/power_rule_differentiation.py b/mathgenerator/funcs/calculus/power_rule_differentiation.py
index 3d960a85..504b346a 100644
--- a/mathgenerator/funcs/calculus/power_rule_differentiation.py
+++ b/mathgenerator/funcs/calculus/power_rule_differentiation.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxCoef=10,
diff --git a/mathgenerator/funcs/calculus/power_rule_integration.py b/mathgenerator/funcs/calculus/power_rule_integration.py
index 00519702..5cef9d41 100644
--- a/mathgenerator/funcs/calculus/power_rule_integration.py
+++ b/mathgenerator/funcs/calculus/power_rule_integration.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxCoef=10,
diff --git a/mathgenerator/funcs/calculus/stationary_points.py b/mathgenerator/funcs/calculus/stationary_points.py
index 5ab844a8..2f963163 100644
--- a/mathgenerator/funcs/calculus/stationary_points.py
+++ b/mathgenerator/funcs/calculus/stationary_points.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 import sympy
 
 
diff --git a/mathgenerator/funcs/computer_science/__init__.py b/mathgenerator/funcs/computer_science/__init__.py
index f902c5f2..410f2509 100644
--- a/mathgenerator/funcs/computer_science/__init__.py
+++ b/mathgenerator/funcs/computer_science/__init__.py
@@ -1,14 +1,14 @@
 from ...__init__ import *
 
-from .bcd_to_decimal import *
-from .binary_2s_complement import *
-from .binary_complement_1s import *
-from .binary_to_decimal import *
-from .binary_to_hex import *
-from .decimal_to_bcd import *
-from .decimal_to_binary import *
-from .decimal_to_hexadeci import *
-from .decimal_to_octal import *
-from .fibonacci_series import *
-from .modulo_division import *
-from .nth_fibonacci_number import *
+from .bcd_to_decimal import bcd_to_decimal
+from .binary_2s_complement import binary_2s_complement
+from .binary_complement_1s import binary_complement_1s
+from .binary_to_decimal import binary_to_decimal
+from .binary_to_hex import binary_to_hex
+from .decimal_to_bcd import decimal_to_bcd
+from .decimal_to_binary import decimal_to_binary
+from .decimal_to_hexadeci import decimal_to_hexadeci
+from .decimal_to_octal import decimal_to_octal
+from .fibonacci_series import fibonacci_series
+from .modulo_division import modulo_division
+from .nth_fibonacci_number import nth_fibonacci_number
diff --git a/mathgenerator/funcs/computer_science/bcd_to_decimal.py b/mathgenerator/funcs/computer_science/bcd_to_decimal.py
index e10dbc43..187a2ce5 100644
--- a/mathgenerator/funcs/computer_science/bcd_to_decimal.py
+++ b/mathgenerator/funcs/computer_science/bcd_to_decimal.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxNumber=10000, format='string'):
diff --git a/mathgenerator/funcs/computer_science/binary_2s_complement.py b/mathgenerator/funcs/computer_science/binary_2s_complement.py
index 2c41e829..030a6416 100644
--- a/mathgenerator/funcs/computer_science/binary_2s_complement.py
+++ b/mathgenerator/funcs/computer_science/binary_2s_complement.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxDigits=10, format='string'):
diff --git a/mathgenerator/funcs/computer_science/binary_complement_1s.py b/mathgenerator/funcs/computer_science/binary_complement_1s.py
index 84111fc4..6adaaadc 100644
--- a/mathgenerator/funcs/computer_science/binary_complement_1s.py
+++ b/mathgenerator/funcs/computer_science/binary_complement_1s.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxDigits=10, format='string'):
diff --git a/mathgenerator/funcs/computer_science/binary_to_decimal.py b/mathgenerator/funcs/computer_science/binary_to_decimal.py
index 0820a9b8..e240d330 100644
--- a/mathgenerator/funcs/computer_science/binary_to_decimal.py
+++ b/mathgenerator/funcs/computer_science/binary_to_decimal.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(max_dig=10, format='string'):
diff --git a/mathgenerator/funcs/computer_science/binary_to_hex.py b/mathgenerator/funcs/computer_science/binary_to_hex.py
index 6c4c6457..9ee45192 100644
--- a/mathgenerator/funcs/computer_science/binary_to_hex.py
+++ b/mathgenerator/funcs/computer_science/binary_to_hex.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(max_dig=10, format='string'):
diff --git a/mathgenerator/funcs/computer_science/decimal_to_bcd.py b/mathgenerator/funcs/computer_science/decimal_to_bcd.py
index 728b26ee..31e9d1fd 100644
--- a/mathgenerator/funcs/computer_science/decimal_to_bcd.py
+++ b/mathgenerator/funcs/computer_science/decimal_to_bcd.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxNumber=10000, format='string'):
diff --git a/mathgenerator/funcs/computer_science/decimal_to_binary.py b/mathgenerator/funcs/computer_science/decimal_to_binary.py
index 2129102d..e409f180 100644
--- a/mathgenerator/funcs/computer_science/decimal_to_binary.py
+++ b/mathgenerator/funcs/computer_science/decimal_to_binary.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(max_dec=99, format='string'):
diff --git a/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py b/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py
index c9d4bf98..2486ce0f 100644
--- a/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py
+++ b/mathgenerator/funcs/computer_science/decimal_to_hexadeci.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(max_dec=1000, format='string'):
diff --git a/mathgenerator/funcs/computer_science/decimal_to_octal.py b/mathgenerator/funcs/computer_science/decimal_to_octal.py
index a706afe0..d867ab3c 100644
--- a/mathgenerator/funcs/computer_science/decimal_to_octal.py
+++ b/mathgenerator/funcs/computer_science/decimal_to_octal.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxDecimal=4096, format='string'):
diff --git a/mathgenerator/funcs/computer_science/fibonacci_series.py b/mathgenerator/funcs/computer_science/fibonacci_series.py
index 166b21ea..86dfe01a 100644
--- a/mathgenerator/funcs/computer_science/fibonacci_series.py
+++ b/mathgenerator/funcs/computer_science/fibonacci_series.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minNo=1, format='string'):
diff --git a/mathgenerator/funcs/computer_science/modulo_division.py b/mathgenerator/funcs/computer_science/modulo_division.py
index 1d6a04a4..660df084 100644
--- a/mathgenerator/funcs/computer_science/modulo_division.py
+++ b/mathgenerator/funcs/computer_science/modulo_division.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxRes=99, maxModulo=99, format='string'):
diff --git a/mathgenerator/funcs/computer_science/nth_fibonacci_number.py b/mathgenerator/funcs/computer_science/nth_fibonacci_number.py
index 22c5188c..c44e6566 100644
--- a/mathgenerator/funcs/computer_science/nth_fibonacci_number.py
+++ b/mathgenerator/funcs/computer_science/nth_fibonacci_number.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/__init__.py b/mathgenerator/funcs/geometry/__init__.py
index 23480e0d..37be55a0 100644
--- a/mathgenerator/funcs/geometry/__init__.py
+++ b/mathgenerator/funcs/geometry/__init__.py
@@ -1,35 +1,35 @@
 from ...__init__ import *
 
-from .angle_btw_vectors import *
-from .angle_regular_polygon import *
-from .arc_length import *
-from .area_of_circle import *
-from .area_of_circle_given_center_and_point import *
-from .area_of_triangle import *
-from .basic_trigonometry import *
-from .circumference import *
-from .curved_surface_area_cylinder import *
-from .degree_to_rad import *
-from .equation_of_line_from_two_points import *
-from .fourth_angle_of_quadrilateral import *
-from .perimeter_of_polygons import *
-from .pythagorean_theorem import *
-from .radian_to_deg import *
-from .sector_area import *
-from .sum_of_polygon_angles import *
-from .surface_area_cone import *
-from .surface_area_cube import *
-from .surface_area_cuboid import *
-from .surface_area_cylinder import *
-from .surface_area_pyramid import *
-from .surface_area_sphere import *
-from .third_angle_of_triangle import *
-from .valid_triangle import *
-from .volume_cone import *
-from .volume_cube import *
-from .volume_cuboid import *
-from .volume_cylinder import *
-from .volume_frustum import *
-from .volume_hemisphere import *
-from .volume_pyramid import *
-from .volume_sphere import *
+from .angle_btw_vectors import angle_btw_vectors
+from .angle_regular_polygon import angle_regular_polygon
+from .arc_length import arc_length
+from .area_of_circle import area_of_circle
+from .area_of_circle_given_center_and_point import area_of_circle_given_center_and_point
+from .area_of_triangle import area_of_triangle
+from .basic_trigonometry import basic_trigonometry
+from .circumference import circumference
+from .curved_surface_area_cylinder import curved_surface_area_cylinder
+from .degree_to_rad import degree_to_rad
+from .equation_of_line_from_two_points import equation_of_line_from_two_points
+from .fourth_angle_of_quadrilateral import fourth_angle_of_quadrilateral
+from .perimeter_of_polygons import perimeter_of_polygons
+from .pythagorean_theorem import pythagorean_theorem
+from .radian_to_deg import radian_to_deg
+from .sector_area import sector_area
+from .sum_of_polygon_angles import sum_of_polygon_angles
+from .surface_area_cone import surface_area_cone
+from .surface_area_cube import surface_area_cube
+from .surface_area_cuboid import surface_area_cuboid
+from .surface_area_cylinder import surface_area_cylinder
+from .surface_area_pyramid import surface_area_pyramid
+from .surface_area_sphere import surface_area_sphere
+from .third_angle_of_triangle import third_angle_of_triangle
+from .valid_triangle import valid_triangle
+from .volume_cone import volume_cone
+from .volume_cube import volume_cube
+from .volume_cuboid import volume_cuboid
+from .volume_cylinder import volume_cylinder
+from .volume_frustum import volume_frustum
+from .volume_hemisphere import volume_hemisphere
+from .volume_pyramid import volume_pyramid
+from .volume_sphere import volume_sphere
diff --git a/mathgenerator/funcs/geometry/angle_btw_vectors.py b/mathgenerator/funcs/geometry/angle_btw_vectors.py
index fce8835d..741abe2e 100644
--- a/mathgenerator/funcs/geometry/angle_btw_vectors.py
+++ b/mathgenerator/funcs/geometry/angle_btw_vectors.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/angle_regular_polygon.py b/mathgenerator/funcs/geometry/angle_regular_polygon.py
index 5c598725..93c8d0f8 100644
--- a/mathgenerator/funcs/geometry/angle_regular_polygon.py
+++ b/mathgenerator/funcs/geometry/angle_regular_polygon.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minVal=3, maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/geometry/arc_length.py b/mathgenerator/funcs/geometry/arc_length.py
index 3e9e82dc..63475a13 100644
--- a/mathgenerator/funcs/geometry/arc_length.py
+++ b/mathgenerator/funcs/geometry/arc_length.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/area_of_circle.py b/mathgenerator/funcs/geometry/area_of_circle.py
index 88b17d75..399edc63 100644
--- a/mathgenerator/funcs/geometry/area_of_circle.py
+++ b/mathgenerator/funcs/geometry/area_of_circle.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxRadius=100, format='string'):
diff --git a/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py b/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py
index a1e61922..c1178e18 100644
--- a/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py
+++ b/mathgenerator/funcs/geometry/area_of_circle_given_center_and_point.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 from math import cos, sin, pi
 
 
@@ -23,5 +24,5 @@ def gen_func(maxCoordinate=10, maxRadius=10, format='string'):
         return center_x, center_y, point_x, point_y, area
 
 
-area_of_circle = Generator("Area of Circle given center and a point on circle", 115, gen_func,
-                           ["maxCoordinate = 10", "maxRadius=10"])
+area_of_circle_given_center_and_point = Generator("Area of Circle given center and a point on circle", 115, gen_func,
+                                                  ["maxCoordinate = 10", "maxRadius=10"])
diff --git a/mathgenerator/funcs/geometry/area_of_triangle.py b/mathgenerator/funcs/geometry/area_of_triangle.py
index b3f9b333..5fab0277 100644
--- a/mathgenerator/funcs/geometry/area_of_triangle.py
+++ b/mathgenerator/funcs/geometry/area_of_triangle.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxA=20, maxB=20, format='string'):
diff --git a/mathgenerator/funcs/geometry/basic_trigonometry.py b/mathgenerator/funcs/geometry/basic_trigonometry.py
index 0f51d1d9..3281323e 100644
--- a/mathgenerator/funcs/geometry/basic_trigonometry.py
+++ b/mathgenerator/funcs/geometry/basic_trigonometry.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/circumference.py b/mathgenerator/funcs/geometry/circumference.py
index daecbc26..d5dc3e13 100644
--- a/mathgenerator/funcs/geometry/circumference.py
+++ b/mathgenerator/funcs/geometry/circumference.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py b/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py
index c3bbb84e..5be21914 100644
--- a/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py
+++ b/mathgenerator/funcs/geometry/curved_surface_area_cylinder.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=49, maxHeight=99, format='string'):
diff --git a/mathgenerator/funcs/geometry/degree_to_rad.py b/mathgenerator/funcs/geometry/degree_to_rad.py
index bedf807a..86ec044e 100644
--- a/mathgenerator/funcs/geometry/degree_to_rad.py
+++ b/mathgenerator/funcs/geometry/degree_to_rad.py
@@ -1,10 +1,11 @@
-from .__init__ import *
-from numpy import pi
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(max_deg=360, format='string'):
     a = random.randint(0, max_deg)
-    b = (pi * a) / 180
+    b = (math.pi * a) / 180
     b = round(b, 2)
 
     if format == 'string':
diff --git a/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py b/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py
index 51ca37f8..55635b16 100644
--- a/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py
+++ b/mathgenerator/funcs/geometry/equation_of_line_from_two_points.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py b/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py
index 96f359d7..1d071005 100644
--- a/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py
+++ b/mathgenerator/funcs/geometry/fourth_angle_of_quadrilateral.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxAngle=180, format='string'):
diff --git a/mathgenerator/funcs/geometry/perimeter_of_polygons.py b/mathgenerator/funcs/geometry/perimeter_of_polygons.py
index aea8a5c3..649dff66 100644
--- a/mathgenerator/funcs/geometry/perimeter_of_polygons.py
+++ b/mathgenerator/funcs/geometry/perimeter_of_polygons.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSides=12, maxLength=120, format='string'):
diff --git a/mathgenerator/funcs/geometry/pythagorean_theorem.py b/mathgenerator/funcs/geometry/pythagorean_theorem.py
index bede009a..f95ded0a 100644
--- a/mathgenerator/funcs/geometry/pythagorean_theorem.py
+++ b/mathgenerator/funcs/geometry/pythagorean_theorem.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxLength=20, format='string'):
diff --git a/mathgenerator/funcs/geometry/radian_to_deg.py b/mathgenerator/funcs/geometry/radian_to_deg.py
index 5c22b759..49238107 100644
--- a/mathgenerator/funcs/geometry/radian_to_deg.py
+++ b/mathgenerator/funcs/geometry/radian_to_deg.py
@@ -1,11 +1,12 @@
-from .__init__ import *
-from numpy import pi
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(max_rad=3, format='string'):
     # max_rad is supposed to be pi but random can't handle non-integer
     a = random.randint(0, max_rad)
-    b = (180 * a) / pi
+    b = (180 * a) / math.pi
     b = round(b, 2)
 
     if format == 'string':
diff --git a/mathgenerator/funcs/geometry/sector_area.py b/mathgenerator/funcs/geometry/sector_area.py
index ee601088..f3bb6a12 100644
--- a/mathgenerator/funcs/geometry/sector_area.py
+++ b/mathgenerator/funcs/geometry/sector_area.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=49, maxAngle=359, format='string'):
diff --git a/mathgenerator/funcs/geometry/sum_of_polygon_angles.py b/mathgenerator/funcs/geometry/sum_of_polygon_angles.py
index d715cff2..940314d2 100644
--- a/mathgenerator/funcs/geometry/sum_of_polygon_angles.py
+++ b/mathgenerator/funcs/geometry/sum_of_polygon_angles.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSides=12, format='string'):
diff --git a/mathgenerator/funcs/geometry/surface_area_cone.py b/mathgenerator/funcs/geometry/surface_area_cone.py
index c2c03f58..c47b0792 100644
--- a/mathgenerator/funcs/geometry/surface_area_cone.py
+++ b/mathgenerator/funcs/geometry/surface_area_cone.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/surface_area_cube.py b/mathgenerator/funcs/geometry/surface_area_cube.py
index e47829aa..eb5e8279 100644
--- a/mathgenerator/funcs/geometry/surface_area_cube.py
+++ b/mathgenerator/funcs/geometry/surface_area_cube.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSide=20, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/surface_area_cuboid.py b/mathgenerator/funcs/geometry/surface_area_cuboid.py
index 97abb86f..66004f77 100644
--- a/mathgenerator/funcs/geometry/surface_area_cuboid.py
+++ b/mathgenerator/funcs/geometry/surface_area_cuboid.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSide=20, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/surface_area_cylinder.py b/mathgenerator/funcs/geometry/surface_area_cylinder.py
index a1eb5d4a..8e3cdc26 100644
--- a/mathgenerator/funcs/geometry/surface_area_cylinder.py
+++ b/mathgenerator/funcs/geometry/surface_area_cylinder.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/surface_area_pyramid.py b/mathgenerator/funcs/geometry/surface_area_pyramid.py
index 3f6b24d8..c8f56e63 100644
--- a/mathgenerator/funcs/geometry/surface_area_pyramid.py
+++ b/mathgenerator/funcs/geometry/surface_area_pyramid.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 # List of Pythagorean triplets
 _PYTHAGOREAN = [(3, 4, 5),
diff --git a/mathgenerator/funcs/geometry/surface_area_sphere.py b/mathgenerator/funcs/geometry/surface_area_sphere.py
index bf89476f..d8c0eb66 100644
--- a/mathgenerator/funcs/geometry/surface_area_sphere.py
+++ b/mathgenerator/funcs/geometry/surface_area_sphere.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxSide=20, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/third_angle_of_triangle.py b/mathgenerator/funcs/geometry/third_angle_of_triangle.py
index 61461f84..c175a76f 100644
--- a/mathgenerator/funcs/geometry/third_angle_of_triangle.py
+++ b/mathgenerator/funcs/geometry/third_angle_of_triangle.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxAngle=89, format='string'):
diff --git a/mathgenerator/funcs/geometry/valid_triangle.py b/mathgenerator/funcs/geometry/valid_triangle.py
index 70f8a314..bcbc32db 100644
--- a/mathgenerator/funcs/geometry/valid_triangle.py
+++ b/mathgenerator/funcs/geometry/valid_triangle.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSideLength=50, format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_cone.py b/mathgenerator/funcs/geometry/volume_cone.py
index ca5f4cfc..c2fba7b8 100644
--- a/mathgenerator/funcs/geometry/volume_cone.py
+++ b/mathgenerator/funcs/geometry/volume_cone.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_cube.py b/mathgenerator/funcs/geometry/volume_cube.py
index 53ba8eb8..165b2a53 100644
--- a/mathgenerator/funcs/geometry/volume_cube.py
+++ b/mathgenerator/funcs/geometry/volume_cube.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSide=20, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_cuboid.py b/mathgenerator/funcs/geometry/volume_cuboid.py
index 5f38c256..b14ab73b 100644
--- a/mathgenerator/funcs/geometry/volume_cuboid.py
+++ b/mathgenerator/funcs/geometry/volume_cuboid.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxSide=20, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_cylinder.py b/mathgenerator/funcs/geometry/volume_cylinder.py
index 201ffd1e..6a8971cd 100644
--- a/mathgenerator/funcs/geometry/volume_cylinder.py
+++ b/mathgenerator/funcs/geometry/volume_cylinder.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_frustum.py b/mathgenerator/funcs/geometry/volume_frustum.py
index 715d2c22..07cade5c 100644
--- a/mathgenerator/funcs/geometry/volume_frustum.py
+++ b/mathgenerator/funcs/geometry/volume_frustum.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxR1=20, maxR2=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_hemisphere.py b/mathgenerator/funcs/geometry/volume_hemisphere.py
index 4b4bb2d6..8eb5d482 100644
--- a/mathgenerator/funcs/geometry/volume_hemisphere.py
+++ b/mathgenerator/funcs/geometry/volume_hemisphere.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=100, format='string'):
@@ -15,5 +17,5 @@ def gen_func(maxRadius=100, format='string'):
         return r, ans
 
 
-volume_sphere = Generator("Volume of Hemisphere", 117, gen_func,
-                          ["maxRadius=100"])
+volume_hemisphere = Generator("Volume of Hemisphere", 117, gen_func,
+                              ["maxRadius=100"])
diff --git a/mathgenerator/funcs/geometry/volume_pyramid.py b/mathgenerator/funcs/geometry/volume_pyramid.py
index e14e08b4..c0190024 100644
--- a/mathgenerator/funcs/geometry/volume_pyramid.py
+++ b/mathgenerator/funcs/geometry/volume_pyramid.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxLength=20, maxWidth=20, maxHeight=50, unit='m', format='string'):
diff --git a/mathgenerator/funcs/geometry/volume_sphere.py b/mathgenerator/funcs/geometry/volume_sphere.py
index 0950bd1e..92ebd9b3 100644
--- a/mathgenerator/funcs/geometry/volume_sphere.py
+++ b/mathgenerator/funcs/geometry/volume_sphere.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+import math
 
 
 def gen_func(maxRadius=100, format='string'):
diff --git a/mathgenerator/funcs/misc/__init__.py b/mathgenerator/funcs/misc/__init__.py
index a7be6557..ee9d054b 100644
--- a/mathgenerator/funcs/misc/__init__.py
+++ b/mathgenerator/funcs/misc/__init__.py
@@ -1,28 +1,28 @@
 from ...__init__ import *
 
-from .Factors import *
-from .arithmetic_progression_sum import *
-from .arithmetic_progression_term import *
-from .base_conversion import *
-from .binomial_distribution import *
-from .celsius_to_fahrenheit import *
-from .common_factors import *
-from .complex_to_polar import *
-from .decimal_to_roman_numerals import *
-from .euclidian_norm import *
-from .gcd import *
-from .geometric_mean import *
-from .geometric_progression import *
-from .harmonic_mean import *
-from .hcf import *
-from .is_leap_year import *
-from .lcm import *
-from .minutes_to_hours import *
-from .prime_factors import *
-from .product_of_scientific_notations import *
-from .profit_loss_percent import *
-from .quotient_of_power_same_base import *
-from .quotient_of_power_same_power import *
-from .set_operation import *
-from .signum_function import *
-from .surds_comparison import *
+from .arithmetic_progression_sum import arithmetic_progression_sum
+from .arithmetic_progression_term import arithmetic_progression_term
+from .base_conversion import base_conversion
+from .binomial_distribution import binomial_distribution
+from .celsius_to_fahrenheit import celsius_to_fahrenheit
+from .common_factors import common_factors
+from .complex_to_polar import complex_to_polar
+from .decimal_to_roman_numerals import decimal_to_roman_numerals
+from .euclidian_norm import euclidian_norm
+from .factors import factors
+from .gcd import gcd
+from .geometric_mean import geometric_mean
+from .geometric_progression import geometric_progression
+from .harmonic_mean import harmonic_mean
+from .hcf import hcf
+from .is_leap_year import is_leap_year
+from .lcm import lcm
+from .minutes_to_hours import minutes_to_hours
+from .prime_factors import prime_factors
+from .product_of_scientific_notations import product_of_scientific_notations
+from .profit_loss_percent import profit_loss_percent
+from .quotient_of_power_same_base import quotient_of_power_same_base
+from .quotient_of_power_same_power import quotient_of_power_same_power
+from .set_operation import set_operation
+from .signum_function import signum_function
+from .surds_comparison import surds_comparison
diff --git a/mathgenerator/funcs/misc/arithmetic_progression_sum.py b/mathgenerator/funcs/misc/arithmetic_progression_sum.py
index 8e40ee79..44da588b 100644
--- a/mathgenerator/funcs/misc/arithmetic_progression_sum.py
+++ b/mathgenerator/funcs/misc/arithmetic_progression_sum.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxd=100,
diff --git a/mathgenerator/funcs/misc/arithmetic_progression_term.py b/mathgenerator/funcs/misc/arithmetic_progression_term.py
index 9977cc9e..4a97a6d2 100644
--- a/mathgenerator/funcs/misc/arithmetic_progression_term.py
+++ b/mathgenerator/funcs/misc/arithmetic_progression_term.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxd=100,
diff --git a/mathgenerator/funcs/misc/base_conversion.py b/mathgenerator/funcs/misc/base_conversion.py
index f48c2a4a..a465e3e9 100644
--- a/mathgenerator/funcs/misc/base_conversion.py
+++ b/mathgenerator/funcs/misc/base_conversion.py
@@ -1,4 +1,6 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
+
 
 # base from 2 to 36
 alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
diff --git a/mathgenerator/funcs/misc/binomial_distribution.py b/mathgenerator/funcs/misc/binomial_distribution.py
index f457c63f..bfd16ca6 100644
--- a/mathgenerator/funcs/misc/binomial_distribution.py
+++ b/mathgenerator/funcs/misc/binomial_distribution.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def factorial(n):
diff --git a/mathgenerator/funcs/misc/celsius_to_fahrenheit.py b/mathgenerator/funcs/misc/celsius_to_fahrenheit.py
index 2af32854..4b46e364 100644
--- a/mathgenerator/funcs/misc/celsius_to_fahrenheit.py
+++ b/mathgenerator/funcs/misc/celsius_to_fahrenheit.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxTemp=100, format='string'):
diff --git a/mathgenerator/funcs/misc/common_factors.py b/mathgenerator/funcs/misc/common_factors.py
index 76d752ff..ba038067 100644
--- a/mathgenerator/funcs/misc/common_factors.py
+++ b/mathgenerator/funcs/misc/common_factors.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=100, format='string'):
diff --git a/mathgenerator/funcs/misc/complex_to_polar.py b/mathgenerator/funcs/misc/complex_to_polar.py
index eaba4ba1..982d46e3 100644
--- a/mathgenerator/funcs/misc/complex_to_polar.py
+++ b/mathgenerator/funcs/misc/complex_to_polar.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/misc/decimal_to_roman_numerals.py b/mathgenerator/funcs/misc/decimal_to_roman_numerals.py
index 2d7232db..5bde099e 100644
--- a/mathgenerator/funcs/misc/decimal_to_roman_numerals.py
+++ b/mathgenerator/funcs/misc/decimal_to_roman_numerals.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/misc/euclidian_norm.py b/mathgenerator/funcs/misc/euclidian_norm.py
index ac3bf004..3da6b41e 100644
--- a/mathgenerator/funcs/misc/euclidian_norm.py
+++ b/mathgenerator/funcs/misc/euclidian_norm.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
@@ -18,5 +18,5 @@ def gen_func(maxEltAmt=20, format='string'):
         return vec, solution
 
 
-eucldian_norm = Generator("Euclidian norm or L2 norm of a vector", 69,
-                          gen_func, ["maxEltAmt=20"])
+euclidian_norm = Generator("Euclidian norm or L2 norm of a vector", 69,
+                           gen_func, ["maxEltAmt=20"])
diff --git a/mathgenerator/funcs/misc/Factors.py b/mathgenerator/funcs/misc/factors.py
similarity index 77%
rename from mathgenerator/funcs/misc/Factors.py
rename to mathgenerator/funcs/misc/factors.py
index 060c46ae..5666e63d 100644
--- a/mathgenerator/funcs/misc/Factors.py
+++ b/mathgenerator/funcs/misc/factors.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from .. import Generator
+import random
 
 
 def gen_func(maxVal=1000, format='string'):
@@ -27,5 +28,5 @@ def gen_func(maxVal=1000, format='string'):
         return n, factors
 
 
-common_factors = Generator("Factors of a number", 116, gen_func,
-                           ["maxVal=1000"])
+factors = Generator("Factors of a number", 116, gen_func,
+                    ["maxVal=1000"])
diff --git a/mathgenerator/funcs/misc/gcd.py b/mathgenerator/funcs/misc/gcd.py
index be47c27c..692a250d 100644
--- a/mathgenerator/funcs/misc/gcd.py
+++ b/mathgenerator/funcs/misc/gcd.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/misc/geometric_mean.py b/mathgenerator/funcs/misc/geometric_mean.py
index 1d781820..1be3e105 100644
--- a/mathgenerator/funcs/misc/geometric_mean.py
+++ b/mathgenerator/funcs/misc/geometric_mean.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=100, maxNum=4, format='string'):
diff --git a/mathgenerator/funcs/misc/geometric_progression.py b/mathgenerator/funcs/misc/geometric_progression.py
index 4a157409..9edbf2cb 100644
--- a/mathgenerator/funcs/misc/geometric_progression.py
+++ b/mathgenerator/funcs/misc/geometric_progression.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(number_values=6,
diff --git a/mathgenerator/funcs/misc/harmonic_mean.py b/mathgenerator/funcs/misc/harmonic_mean.py
index 33193059..cce36088 100644
--- a/mathgenerator/funcs/misc/harmonic_mean.py
+++ b/mathgenerator/funcs/misc/harmonic_mean.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxValue=100, maxNum=4, format='string'):
diff --git a/mathgenerator/funcs/misc/hcf.py b/mathgenerator/funcs/misc/hcf.py
index 83de2ad1..278eead2 100644
--- a/mathgenerator/funcs/misc/hcf.py
+++ b/mathgenerator/funcs/misc/hcf.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/misc/is_leap_year.py b/mathgenerator/funcs/misc/is_leap_year.py
index 400f051a..46214bff 100644
--- a/mathgenerator/funcs/misc/is_leap_year.py
+++ b/mathgenerator/funcs/misc/is_leap_year.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minNumber=1900, maxNumber=2099, format='string'):
diff --git a/mathgenerator/funcs/misc/lcm.py b/mathgenerator/funcs/misc/lcm.py
index 39777e3b..3bcd89fc 100644
--- a/mathgenerator/funcs/misc/lcm.py
+++ b/mathgenerator/funcs/misc/lcm.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxVal=20, format='string'):
diff --git a/mathgenerator/funcs/misc/minutes_to_hours.py b/mathgenerator/funcs/misc/minutes_to_hours.py
index 562f4140..43995a68 100644
--- a/mathgenerator/funcs/misc/minutes_to_hours.py
+++ b/mathgenerator/funcs/misc/minutes_to_hours.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxMinutes=999, format='string'):
diff --git a/mathgenerator/funcs/misc/prime_factors.py b/mathgenerator/funcs/misc/prime_factors.py
index 365cbdb5..7444ef94 100644
--- a/mathgenerator/funcs/misc/prime_factors.py
+++ b/mathgenerator/funcs/misc/prime_factors.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minVal=1, maxVal=200, format='string'):
diff --git a/mathgenerator/funcs/misc/product_of_scientific_notations.py b/mathgenerator/funcs/misc/product_of_scientific_notations.py
index ce3d4111..e1191f07 100644
--- a/mathgenerator/funcs/misc/product_of_scientific_notations.py
+++ b/mathgenerator/funcs/misc/product_of_scientific_notations.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minExpVal=-100, maxExpVal=100, format='string'):
diff --git a/mathgenerator/funcs/misc/profit_loss_percent.py b/mathgenerator/funcs/misc/profit_loss_percent.py
index ca75bf95..6f8711ca 100644
--- a/mathgenerator/funcs/misc/profit_loss_percent.py
+++ b/mathgenerator/funcs/misc/profit_loss_percent.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxCP=1000, maxSP=1000, format='string'):
diff --git a/mathgenerator/funcs/misc/quotient_of_power_same_base.py b/mathgenerator/funcs/misc/quotient_of_power_same_base.py
index 5c961f73..d50007e2 100644
--- a/mathgenerator/funcs/misc/quotient_of_power_same_base.py
+++ b/mathgenerator/funcs/misc/quotient_of_power_same_base.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxBase=50, maxPower=10, format='string'):
diff --git a/mathgenerator/funcs/misc/quotient_of_power_same_power.py b/mathgenerator/funcs/misc/quotient_of_power_same_power.py
index 0276920f..9a1d8d38 100644
--- a/mathgenerator/funcs/misc/quotient_of_power_same_power.py
+++ b/mathgenerator/funcs/misc/quotient_of_power_same_power.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxBase=50, maxPower=10, format='string'):
diff --git a/mathgenerator/funcs/misc/set_operation.py b/mathgenerator/funcs/misc/set_operation.py
index cdd2a4c1..e8139a41 100644
--- a/mathgenerator/funcs/misc/set_operation.py
+++ b/mathgenerator/funcs/misc/set_operation.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(minval=3, maxval=7, n_a=4, n_b=5, format='string'):
diff --git a/mathgenerator/funcs/misc/signum_function.py b/mathgenerator/funcs/misc/signum_function.py
index 61903b07..d56e8564 100644
--- a/mathgenerator/funcs/misc/signum_function.py
+++ b/mathgenerator/funcs/misc/signum_function.py
@@ -1,4 +1,4 @@
-from .__init__ import *
+from ..__init__ import Generator
 import random
 
 
diff --git a/mathgenerator/funcs/misc/surds_comparison.py b/mathgenerator/funcs/misc/surds_comparison.py
index 30f42303..a02e2238 100644
--- a/mathgenerator/funcs/misc/surds_comparison.py
+++ b/mathgenerator/funcs/misc/surds_comparison.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/statistics/__init__.py b/mathgenerator/funcs/statistics/__init__.py
index 84848a91..83f3171c 100644
--- a/mathgenerator/funcs/statistics/__init__.py
+++ b/mathgenerator/funcs/statistics/__init__.py
@@ -1,9 +1,9 @@
 from ...__init__ import *
 
-from .combinations import *
-from .conditional_probability import *
-from .confidence_interval import *
-from .data_summary import *
-from .dice_sum_probability import *
-from .mean_median import *
-from .permutation import *
+from .combinations import combinations
+from .conditional_probability import conditional_probability
+from .confidence_interval import confidence_interval
+from .data_summary import data_summary
+from .dice_sum_probability import dice_sum_probability
+from .mean_median import mean_median
+from .permutation import permutation
diff --git a/mathgenerator/funcs/statistics/combinations.py b/mathgenerator/funcs/statistics/combinations.py
index 712436cf..8bfa2ccd 100644
--- a/mathgenerator/funcs/statistics/combinations.py
+++ b/mathgenerator/funcs/statistics/combinations.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxlength=20, format='string'):
diff --git a/mathgenerator/funcs/statistics/conditional_probability.py b/mathgenerator/funcs/statistics/conditional_probability.py
index ebc19a05..b0752dcc 100644
--- a/mathgenerator/funcs/statistics/conditional_probability.py
+++ b/mathgenerator/funcs/statistics/conditional_probability.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(format='string'):
diff --git a/mathgenerator/funcs/statistics/confidence_interval.py b/mathgenerator/funcs/statistics/confidence_interval.py
index c6386852..03cd145a 100644
--- a/mathgenerator/funcs/statistics/confidence_interval.py
+++ b/mathgenerator/funcs/statistics/confidence_interval.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/mathgenerator/funcs/statistics/data_summary.py b/mathgenerator/funcs/statistics/data_summary.py
index 82ad9731..262e227c 100644
--- a/mathgenerator/funcs/statistics/data_summary.py
+++ b/mathgenerator/funcs/statistics/data_summary.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(number_values=15, minval=5, maxval=50, format='string'):
diff --git a/mathgenerator/funcs/statistics/dice_sum_probability.py b/mathgenerator/funcs/statistics/dice_sum_probability.py
index cf662ce3..c2131408 100644
--- a/mathgenerator/funcs/statistics/dice_sum_probability.py
+++ b/mathgenerator/funcs/statistics/dice_sum_probability.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def gen_func(maxDice=3, format='string'):
diff --git a/mathgenerator/funcs/statistics/mean_median.py b/mathgenerator/funcs/statistics/mean_median.py
index 5e619fd5..0bf9e5f6 100644
--- a/mathgenerator/funcs/statistics/mean_median.py
+++ b/mathgenerator/funcs/statistics/mean_median.py
@@ -1,4 +1,4 @@
-from .__init__ import *
+from ..__init__ import Generator
 import random
 
 
diff --git a/mathgenerator/funcs/statistics/permutation.py b/mathgenerator/funcs/statistics/permutation.py
index 2c73d990..2cbab135 100644
--- a/mathgenerator/funcs/statistics/permutation.py
+++ b/mathgenerator/funcs/statistics/permutation.py
@@ -1,5 +1,5 @@
-from .__init__ import *
-
+from ..__init__ import Generator
+import random
 import math
 
 
diff --git a/scripts/adoptGenerator.py b/scripts/adoptGenerator.py
index e6d49029..59283f3d 100644
--- a/scripts/adoptGenerator.py
+++ b/scripts/adoptGenerator.py
@@ -33,7 +33,7 @@ def get_filepaths(subject_name):
     lines = ["from ...__init__ import *\n", "\n"]
     for item in full_file_paths:
         if item[:2] != '__':
-            lines.append("from ." + item + " import *\n")
+            lines.append(f"from .{item} import {item}\n")
     with open(f'../mathgenerator/funcs/{subject}/__init__.py', 'w') as f:
         f.writelines(lines)
 
diff --git a/setup.py b/setup.py
index 57093847..0f5c27e2 100644
--- a/setup.py
+++ b/setup.py
@@ -8,5 +8,5 @@
       author_email='lukew25073@gmail.com',
       license='MIT',
       packages=find_packages(),
-      install_requires=['sympy', 'numpy', 'scipy'],
+      install_requires=['sympy', 'scipy'],
       entry_points={})


Test patch:
diff --git a/mathgenerator/funcs/basic_math/greatest_common_divisor.py b/mathgenerator/funcs/basic_math/greatest_common_divisor.py
index 135714cc..cb0cf347 100644
--- a/mathgenerator/funcs/basic_math/greatest_common_divisor.py
+++ b/mathgenerator/funcs/basic_math/greatest_common_divisor.py
@@ -1,4 +1,5 @@
-from .__init__ import *
+from ..__init__ import Generator
+import random
 
 
 def greatestCommonDivisorOfTwoNumbers(number1, number2):