lib_mathLibrary   "lib_math" 
a collection of functions calculating without history operator to avoid max_bars_back errors
 mean(value, reset) 
  Parameters:
     value (float) : series to track
     reset (bool) : flag to reset tracking
@return returns average/mean of value since last reset
 vwap(value, reset) 
  Parameters:
     value (float) : series to track
     reset (bool) : flag to reset tracking
@return returns vwap of value and volume since last reset
 variance(value, reset) 
  Parameters:
     value (float) : series to track
     reset (bool) : flag to reset tracking
@return returns variance of value since last reset
 trend(value, reset) 
  Parameters:
     value (float) : series to track
     reset (bool) : flag to reset tracking
@return   where slope is the trend direction, correlation is a measurement for how well the values fit to the trendline (positive means ), stddev is how far the values deviate from the trend, x1 would be the time where reset is true and x2 would be the current time
MATH
Price - TP/SLPrices 
With this library, you can easily manage prices such as stop loss, take profit, calculate differences, prices from a lower timeframe, and get the order size and commission from the strategy properties tab.
Note that the order size and commission only work with strategies!
 Usage 
Take Profit & Stop Loss
 
var bool open_trade = false
open_trade := strategy.position_size != 0
bars_since_opened = strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) + 1 : 0
// ############################################################
// # TAKE PROFIT
// ############################################################
take_profit = input.string(title='Take Profit', defval='OFF', options= , group='TAKE PROFIT')
take_profit_percentage = input.float(title='Take Profit (% or X)', defval=0, minval=0, step=0.1, group='TAKE PROFIT')
take_profit_bars = input.int(title='Take Profit Bars', defval=0, minval=0, step=1, group='TAKE PROFIT')
take_profit_indication = input.string(title='Take Profit Plot', defval='OFF', options= , group='TAKE PROFIT')
take_profit_color = input.color(title='Take Profit Color', defval=#26A69A, group='TAKE PROFIT')
take_profit_price = math.round_to_mintick(strategy.position_avg_price)
take_profit_plot = plot(take_profit == 'ON' and take_profit_indication == 'ON' and open_trade and bars_since_opened >= take_profit_bars and take_profit_percentage > 0 and nz(take_profit_price) ? take_profit_price : na, color=take_profit_color, style=plot.style_linebr, linewidth=1, title='TP', offset=0)
// ############################################################
// # STOP LOSS
// ############################################################
stop_loss = input.string(title='Stop Loss', defval='OFF', options= , group='STOP LOSS')
stop_loss_percentage = input.float(title='Stop Loss (% or X)', defval=0, minval=0, step=0.1, group='STOP LOSS')
stop_loss_bars = input.int(title='Stop Loss Bars', defval=0, minval=0, step=1, group='STOP LOSS')
stop_loss_indication = input.string(title='Stop Loss Plot', defval='OFF', options= , group='STOP LOSS')
stop_loss_color = input.color(title='Stop Loss Color', defval=#FF5252, group='STOP LOSS')
stop_loss_price = math.round_to_mintick(strategy.position_avg_price)
stop_loss_plot = plot(stop_loss == 'ON' and stop_loss_indication == 'ON' and open_trade and bars_since_opened >= stop_loss_bars and stop_loss_percentage > 0 and nz(stop_loss_price) ? stop_loss_price : na, color=stop_loss_color, style=plot.style_linebr, linewidth=1, title='SL', offset=0)
// ############################################################
// # STRATEGY
// ############################################################
var limit_price = 0.0
var stop_price = 0.0
limit_price := take_profit == 'ON' ? price.take_profit_price(take_profit_price, take_profit_percentage, take_profit_bars, bars_since_opened) : na
stop_price := stop_loss == 'ON' ? price.stop_loss_price(stop_loss_price, stop_loss_percentage, stop_loss_bars, bars_since_opened) : na
strategy.exit(id='TP/SL', comment='TP/SL', from_entry='LONG', limit=limit_price, stop=stop_price)
 
Calculate difference between 2 prices:
 
price.difference(close, close )
 
Get last price from lower timeframe:
 
price.ltf(request.security_lower_tf(ticker, '1', close))
 
Get the order size from the properties tab:
 
price.order_size()
 
Get the commission from the properties tab.
 
price.commission()
 
map_custom_value_usefullLibrary "map_custom_value_usefull"
makes it possible to create: 
1.map with array value:
    for this purpose need:
    1.create map with arrays type value
    2.put your array in this map, overloaded put method itself will put the array based on the type into the required field
    3.next you can get this array with help standard get function, which will determine which field you need to get.(But because of this, only arrays of the same type can be used in one map)
2.map with map value:
    for this purpose need:
    1.create map with maps type value
    2.put your other map in how value in your based map, need you need to put it in the field corresponding to your map type
    3.next you can get this map with help standard get function.You need to specify a special field name here, because the get function cannot be overloaded without additional variables(
map_custom_value_fullLibrary "map_custom_value_full"
makes it possible to create: 
1.map with array value:
    for this purpose need:
    1.create map with arrays type value
    2.put your array in this map, overloaded put method itself will put the array based on the type into the required field
    3.next you can get this array with help standard get function, by specifying the type field of your array
2.map with map value:
    for this purpose need:
    1.create map with maps type value
    2.put your other map in how value in your based map, need you need to put it in the field corresponding to your map type
    3.next you can get this map with help standard get function, by specifying the type field of your array
3.maps with value in array with maps:
    for this purpose need:
    1.create map with arrays type value
    2.put as value maps_arrays fild  with array from maps_arrays type fild which should already contain map of the type you need (there are not all map type fields here you can add a map of the required type by adding a corresponding field of map_arrays type.)
    3.next you can get this array from map with help standard get function, by specifying the type field of your array
Polyline PlusThis library introduces the `PolylinePlus` type, which is an enhanced version of the built-in PineScript `polyline`. It enables two features that are absent from the built-in type:
1. Developers can now efficiently add or remove points from the polyline. In contrast, the built-in `polyline` type is immutable, requiring developers to create a new instance of the polyline to make changes, which is cumbersome and incurs a significant performance penalty.
2. Each `PolylinePlus` instance can theoretically hold up to ~1M points, surpassing the built-in `polyline` type's limit of 10K points, as long as it does not exceed the memory limit of the PineScript runtime.
Internally, each `PolylinePlus` instance utilizes an array of `line`s and an array of `polyline`s. The `line`s array serves as a buffer to store lines formed by recently added points. When the buffer reaches its capacity, it flushes the contents and converts the lines into polylines. These polylines are expected to undergo fewer updates. This approach is similiar to the concept of "Buffered I/O" in file and network systems. By connecting the underlying lines and polylines, this library achieves an enhanced polyline that is dynamic, efficient, and capable of surpassing the maximum number of points imposed by the built-in polyline.
🔵  API 
Step 1: Import this library
 
import algotraderdev/polylineplus/1 as pp
// remember to check the latest version of this library and replace the 1 above.
 
Step 2: Initialize the `PolylinePlus` type.
 
var p = pp.PolylinePlus.new()
 
There are a few optional params that developers can specify in the constructor to modify the behavior and appearance of the polyline instance.
 
var p = pp.PolylinePlus.new(
  // If true, the drawing will also connect the first point to the last point, resulting in a closed polyline.
  closed = false,
  // Determines the field of the chart.point objects that the polyline will use for its x coordinates. Either xloc.bar_index (default), or xloc.bar_time.
  xloc = xloc.bar_index,
  // Color of the polyline. Default is blue.
  line_color = color.blue,
  // Style of the polyline. Default is line.style_solid.
  line_style = line.style_solid,
  // Width of the polyline. Default is 1.
  line_width = 1,
  // The maximum number of points that each built-in `polyline` instance can contain.
  // NOTE: this is not to be confused with the maximum of points that each `PolylinePlus` instance can contain.
  max_points_per_builtin_polyline = 10000,
  // The number of lines to keep in the buffer. If more points are to be added while the buffer is full, then all the lines in the buffer will be flushed into the poylines. 
  // The higher the number, the less frequent we'll need to // flush the buffer, and thus lead to better performance.
  // NOTE: the maximum total number of lines per chart allowed by PineScript is 500. But given there might be other places where the indicator or strategy are drawing lines outside this polyline context, the default value is 50 to be safe.
  lines_bffer_size = 50)
 
Step 3: Push / Pop Points
 
// Push a single point
p.push_point(chart.point.now())
// Push multiple points
chart.point  points = array.from(p1, p2, p3) // Where p1, p2, p3 are all chart.point type.
p.push_points(points)
// Pop point
p.pop_point()
// Resets all the points in the polyline.
p.set_points(points)
// Deletes the polyline.
p.delete()
 
🔵  Benchmark 
Below is a simple benchmark comparing the performance between `PolylinePlus` and the native `polyline` type for incrementally adding 10K points to a polyline.
 
import algotraderdev/polylineplus/2 as pp
var t1 = 0
var t2 = 0
if bar_index < 10000
    int start = timenow
    var p = pp.PolylinePlus.new(xloc = xloc.bar_time, closed = true)
    p.push_point(chart.point.now())
    t1 += timenow - start
    start := timenow
    var polyline pl = na
    var points = array.new()
    points.push(chart.point.now())
    if not na(pl)
        pl.delete()
    pl := polyline.new(points)
    t2 += timenow - start
if barstate.islast
    log.info('{0} {1}', t1, t2)
 
For this benchmark, `PolylinePlus` took ~300ms, whereas the native `polyline` type took ~6000ms.
We can also fine-tune the parameters for `PolylinePlus` to have a larger buffer size for `line`s and a smaller buffer for `polyline`s.
 
var p = pp.PolylinePlus.new(xloc = xloc.bar_time, closed = true, lines_buffer_size = 500, max_points_per_builtin_polyline = 1000)
 
With the above optimization, it only took `PolylinePlus` ~80ms to process the same 10K points, which is ~75x the performance compared to the native `polyline`.
SPTS_StatsPakLibFinally getting around to releasing the library component to the SPTS indicator! 
This library is packed with a ton of great statistics functions to supplement SPTS, these functions add to the capabilities of SPTS including a forecast function. 
The library includes the following functions 
 
  1. Linear Regression (single independent and single dependent)  
  2. Multiple Regression (2 independent variables, 1 dependent) 
  3. Standard Error of Residual Assessment 
  4. Z-Score 
  5. Effect Size 
  6. Confidence Interval 
  7. Paired Sample Test 
  8. Two Tailed T-Test 
  9. Qualitative assessment of T-Test 
  10. T-test table and p value assigner 
  11. Correlation of two arrays 
  12. Quadratic correlation (curvlinear) 
  13. R Squared value of 2 arrays 
  14. R Squared value of 2 floats 
  15. Test of normality 
  16. Forecast function which will push the desired forecasted variables into an array. 
 
One of the biggest added functionalities of this library is the forecasting function. 
This function provides an autoregressive, trainable model that will export forecasted values to 3 arrays, one contains the autoregressed forecasted results, the other two contain the upper confidence forecast and the lower confidence forecast. 
Hope you enjoy and find use for this! 
Library   "SPTS_StatsPakLib" 
 f_linear_regression(independent, dependent, len, variable) 
  TODO: creates a simple linear regression model between two variables.
  Parameters:
     independent (float) 
     dependent (float) 
     len (int) 
     variable (float) 
  Returns: TODO: returns 6 float variables
result: The result of the regression model
pear_cor: The pearson correlation of the regresion model
rsqrd: the R2 of the regression model
std_err: the error of residuals
slope: the slope of the model (coefficient)
intercept: the intercept of the model (y = mx + b is y = slope x + intercept)
 f_multiple_regression(y, x1, x2, input1, input2, len) 
  TODO: creates a multiple regression model between two independent variables and 1 dependent variable.
  Parameters:
     y (float) 
     x1 (float) 
     x2 (float) 
     input1 (float) 
     input2 (float) 
     len (int) 
  Returns: TODO: returns 7 float variables
result: The result of the regression model
pear_cor: The pearson correlation of the regresion model
rsqrd: the R2 of the regression model
std_err: the error of residuals
b1 & b2: the slopes of the model (coefficients)
intercept: the intercept of the model (y = mx + b is y = b1 x + b2 x + intercept)
 f_stanard_error(result, dependent, length) 
  x TODO: performs an assessment on the error of residuals, can be used with any variable in which there are residual values (such as moving averages or more comlpex models)
param x TODO: result is the output, for example, if you are calculating the residuals of a 200 EMA, the result would be the 200 EMA
dependent: is the dependent variable. In the above example with the 200 EMA, your dependent would be the source for your 200 EMA
  Parameters:
     result (float) 
     dependent (float) 
     length (int) 
  Returns: x TODO: the standard error of the residual, which can then be multiplied by standard deviations or used as is.
 f_zscore(variable, length) 
  TODO: Calculates the z-score
  Parameters:
     variable (float) 
     length (int) 
  Returns: TODO: returns float z-score
 f_effect_size(array1, array2) 
  TODO: Calculates the effect size between two arrays of equal scale.
  Parameters:
     array1 (float ) 
     array2 (float ) 
  Returns: TODO: returns the effect size (float)
 f_confidence_interval(array1, array2, ci_input) 
  TODO: Calculates the confidence interval between two arrays
  Parameters:
     array1 (float ) 
     array2 (float ) 
     ci_input (float) 
  Returns: TODO: returns the upper_bound and lower_bound cofidence interval as float values
 paired_sample_t(src1, src2, len) 
  TODO: Performs a paired sample t-test
  Parameters:
     src1 (float) 
     src2 (float) 
     len (int) 
  Returns: TODO: Returns the t-statistic and degrees of freedom of a paired sample t-test
 two_tail_t_test(array1, array2) 
  TODO: Perofrms a two tailed t-test
  Parameters:
     array1 (float ) 
     array2 (float ) 
  Returns: TODO: Returns the t-statistic and degrees of freedom of a two_tail_t_test sample t-test
 t_table_analysis(t_stat, df) 
  TODO: This is to make a qualitative assessment of your paired and single sample t-test
  Parameters:
     t_stat (float) 
     df (float) 
  Returns: TODO: the function will return 2 string variables and 1 colour variable. The 2 string variables indicate whether the results are significant or not and the colour will
output red for insigificant and green for significant
 t_table_p_value(df, t_stat) 
  TODO: This performs a quantaitive assessment on your t-tests to determine the statistical significance p value
  Parameters:
     df (float) 
     t_stat (float) 
  Returns: TODO: The function will return 1 float variable, the p value of the t-test.
 cor_of_array(array1, array2) 
  TODO: This performs a pearson correlation assessment of two arrays. They need to be of equal size!
  Parameters:
     array1 (float ) 
     array2 (float ) 
  Returns: TODO: The function will return the pearson correlation.
 quadratic_correlation(src1, src2, len) 
  TODO: This performs a quadratic (curvlinear) pearson correlation between two values.
  Parameters:
     src1 (float) 
     src2 (float) 
     len (int) 
  Returns: TODO: The function will return the pearson correlation (quadratic based).
 f_r2_array(array1, array2) 
  TODO: Calculates the r2 of two arrays
  Parameters:
     array1 (float ) 
     array2 (float ) 
  Returns: TODO: returns the R2 value
 f_rsqrd(src1, src2, len) 
  TODO: Calculates the r2 of two float variables
  Parameters:
     src1 (float) 
     src2 (float) 
     len (int) 
  Returns: TODO: returns the R2 value
 test_of_normality(array, src) 
  TODO: tests the normal distribution hypothesis
  Parameters:
     array (float ) 
     src (float) 
  Returns: TODO: returns 4 variables, 2 float and 2 string
Skew: the skewness of the dataset
Kurt: the kurtosis of the dataset
dist = the distribution type (recognizes 7 different distribution types)
implication = a string assessment of the implication of the distribution (qualitative)
 f_forecast(output, input, train_len, forecast_length, output_array, upper_array, lower_array) 
  TODO: This performs a simple forecast function on a single dependent variable. It will autoregress this based on the train time, to the desired length of output,
then it will push the forecasted values to 3 float arrays, one that contains the forecasted result, 1 that contains the Upper Confidence Result and one with the lower confidence
result.
  Parameters:
     output (float) 
     input (float) 
     train_len (int) 
     forecast_length (int) 
     output_array (float ) 
     upper_array (float ) 
     lower_array (float ) 
  Returns: TODO: Will return 3 arrays, one with the forecasted results, one with the upper confidence results, and a final with the lower confidence results. Example is given below.
mathLibrary   "math" 
TODO: Math custom MA and more
 pine_ema(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_dema(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_tema(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_sma(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_smma(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_ssma(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_rma(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_wma(x, y) 
  Parameters:
     x (float) 
     y (int) 
 pine_hma(src, length) 
  Parameters:
     src (float) 
     length (int) 
 pine_vwma(x, y) 
  Parameters:
     x (float) 
     y (int) 
 pine_swma(x) 
  Parameters:
     x (float) 
 pine_alma(src, length, offset, sigma) 
  Parameters:
     src (float) 
     length (int) 
     offset (float) 
     sigma (float)
EphemerisLibrary   "Ephemeris" 
TODO: add library description here
 mercuryElements() 
 mercuryRates() 
 venusElements() 
 venusRates() 
 earthElements() 
 earthRates() 
 marsElements() 
 marsRates() 
 jupiterElements() 
 jupiterRates() 
 saturnElements() 
 saturnRates() 
 uranusElements() 
 uranusRates() 
 neptuneElements() 
 neptuneRates() 
 rev360(x) 
  Normalize degrees to within  [0, 360)
  Parameters:
     x (float) : degrees to be normalized
  Returns: Normalized degrees
 scaleAngle(longitude, magnitude, harmonic) 
  Scale angle in degrees
  Parameters:
     longitude (float) 
     magnitude (float) 
     harmonic (int) 
  Returns: Scaled angle in degrees
 julianCenturyInJulianDays() 
  Constant Julian days per century
  Returns: 36525
 julianEpochJ2000() 
  Julian date on J2000 epoch start (2000-01-01)
  Returns: 2451545.0
 meanObliquityForJ2000() 
  Mean obliquity of the ecliptic on J2000 epoch start (2000-01-01)
  Returns: 23.43928
 getJulianDate(Year, Month, Day, Hour, Minute) 
  Convert calendar date to Julian date
  Parameters:
     Year (int) : calendar year as integer (e.g. 2018)
     Month (int) : calendar month (January = 1, December = 12)
     Day (int) : calendar day of month (e.g. January valid days are 1-31)
     Hour (int) : valid values 0-23
     Minute (int) : valid values 0-60
 julianCenturies(date, epoch_start) 
  Centuries since Julian Epoch 2000-01-01
  Parameters:
     date (float) : Julian date to conver to Julian centuries
     epoch_start (float) : Julian date of epoch start (e.g. J2000 epoch = 2451545)
  Returns: Julian date converted to Julian centuries
 julianCenturiesSinceEpochJ2000(julianDate) 
  Calculate Julian centuries since epoch J2000 (2000-01-01)
  Parameters:
     julianDate (float) : Julian Date in days
  Returns: Julian centuries since epoch J2000 (2000-01-01)
 atan2(y, x) 
  Specialized arctan function
  Parameters:
     y (float) : radians
     x (float) : radians
  Returns: special arctan of y/x
 eccAnom(ec, m_param, dp) 
  Compute eccentricity of the anomaly
  Parameters:
     ec (float) : Eccentricity of Orbit
     m_param (float) : Mean Anomaly ?
     dp (int) : Decimal places to round to
  Returns: Eccentricity of the Anomaly
 planetEphemerisCalc(TGen, planetElementId, planetRatesId) 
  Compute planetary ephemeris (longtude relative to Earth or Sun) on a Julian date
  Parameters:
     TGen (float) : Julian Date
     planetElementId (float ) : All planet orbital elements in an array. This index references a specific planet's elements.
     planetRatesId (float ) : All planet orbital rates in an array. This index references a specific planet's rates.
  Returns:   X,Y,Z ecliptic rectangular coordinates and R radius from reference body.
 calculateRightAscensionAndDeclination(earthX, earthY, earthZ, planetX, planetY, planetZ) 
  Calculate right ascension and declination for a planet relative to Earth
  Parameters:
     earthX (float) : Earth X ecliptic rectangular coordinate relative to Sun
     earthY (float) : Earth Y ecliptic rectangular coordinate relative to Sun
     earthZ (float) : Earth Z ecliptic rectangular coordinate relative to Sun
     planetX (float) : Planet X ecliptic rectangular coordinate relative to Sun
     planetY (float) : Planet Y ecliptic rectangular coordinate relative to Sun
     planetZ (float) : Planet Z ecliptic rectangular coordinate relative to Sun
  Returns:   Planet geocentric orbital radius, geocentric right ascension, and geocentric declination
 mercuryHelio(T) 
  Compute Mercury heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Mercury heliocentric longitude on date
 venusHelio(T) 
  Compute Venus heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Venus heliocentric longitude on date
 earthHelio(T) 
  Compute Earth heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Earth heliocentric longitude on date
 marsHelio(T) 
  Compute Mars heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Mars heliocentric longitude on date
 jupiterHelio(T) 
  Compute Jupiter heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Jupiter heliocentric longitude on date
 saturnHelio(T) 
  Compute Saturn heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Saturn heliocentric longitude on date
 neptuneHelio(T) 
  Compute Neptune heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Neptune heliocentric longitude on date
 uranusHelio(T) 
  Compute Uranus heliocentric longitude on date
  Parameters:
     T (float) 
  Returns: Uranus heliocentric longitude on date
 sunGeo(T) 
  Parameters:
     T (float) 
 mercuryGeo(T) 
  Parameters:
     T (float) 
 venusGeo(T) 
  Parameters:
     T (float) 
 marsGeo(T) 
  Parameters:
     T (float) 
 jupiterGeo(T) 
  Parameters:
     T (float) 
 saturnGeo(T) 
  Parameters:
     T (float) 
 neptuneGeo(T) 
  Parameters:
     T (float) 
 uranusGeo(T) 
  Parameters:
     T (float) 
 moonGeo(T_JD) 
  Parameters:
     T_JD (float) 
 mercuryOrbitalPeriod() 
  Mercury orbital period in Earth days
  Returns: 87.9691
 venusOrbitalPeriod() 
  Venus orbital period in Earth days
  Returns: 224.701
 earthOrbitalPeriod() 
  Earth orbital period in Earth days
  Returns: 365.256363004
 marsOrbitalPeriod() 
  Mars orbital period in Earth days
  Returns: 686.980
 jupiterOrbitalPeriod() 
  Jupiter orbital period in Earth days
  Returns: 4332.59
 saturnOrbitalPeriod() 
  Saturn orbital period in Earth days
  Returns: 10759.22
 uranusOrbitalPeriod() 
  Uranus orbital period in Earth days
  Returns: 30688.5
 neptuneOrbitalPeriod() 
  Neptune orbital period in Earth days
  Returns: 60195.0
 jupiterSaturnCompositePeriod() 
 jupiterNeptuneCompositePeriod() 
 jupiterUranusCompositePeriod() 
 saturnNeptuneCompositePeriod() 
 saturnUranusCompositePeriod() 
 planetSineWave(julianDateInCenturies, planetOrbitalPeriod, planetHelio) 
  Convert heliocentric longitude of planet into a sine wave
  Parameters:
     julianDateInCenturies (float) 
     planetOrbitalPeriod (float) : Orbital period of planet in Earth days
     planetHelio (float) : Heliocentric longitude of planet in degrees
  Returns: Sine of heliocentric longitude on a Julian date
WIPFunctionLyaponovLibrary   "WIPFunctionLyaponov" 
Lyapunov exponents are mathematical measures used to describe the behavior of a system over
time. They are named after Russian mathematician Alexei Lyapunov, who first introduced the concept in the
late 19th century. The exponent is defined as the rate at which a particular function or variable changes
over time, and can be positive, negative, or zero.
Positive exponents indicate that a system tends to grow or expand over time, while negative exponents
indicate that a system tends to shrink or decay. Zero exponents indicate that the system does not change
significantly over time. Lyapunov exponents are used in various fields of science and engineering, including
physics, economics, and biology, to study the long-term behavior of complex systems.
~ generated description from vicuna13b
---
To calculate the Lyapunov Exponent (LE) of a given Time Series, we need to follow these steps:
1. Firstly, you should have access to your data in some format like CSV or Excel file. If not, then you can collect it manually using tools such as stopwatches and measuring tapes.
2. Once the data is collected, clean it up by removing any outliers that may skew results. This step involves checking for inconsistencies within your dataset (e.g., extremely large or small values) and either discarding them entirely or replacing with more reasonable estimates based on surrounding values.
3. Next, you need to determine the dimension of your time series data. In most cases, this will be equal to the number of variables being measured in each observation period (e.g., temperature, humidity, wind speed).
4. Now that we have a clean dataset with known dimensions, we can calculate the LE for our Time Series using the following formula:
λ = log(||M^T * M - I||)/log(||v||)
where:
λ (Lyapunov Exponent) is the quantity that will be calculated.
||...|| denotes an Euclidean norm of a vector or matrix, which essentially means taking the square root of the sum of squares for each element in the vector/matrix.
M represents our Jacobian Matrix whose elements are given by:
J_ij = (∂fj / ∂xj) where fj is the jth variable and xj is the ith component of the initial condition vector x(t). In other words, each element in this matrix represents how much a small change in one variable affects another.
I denotes an identity matrix whose elements are all equal to 1 (or any constant value if you prefer). This term essentially acts as a baseline for comparison purposes since we want our Jacobian Matrix M^T * M to be close to it when the system is stable and far away from it when the system is unstable.
v represents an arbitrary vector whose Euclidean norm ||v|| will serve as a scaling factor in our calculation. The choice of this particular vector does not matter since we are only interested in its magnitude (i.e., length) for purposes of normalization. However, if you want to ensure that your results are accurate and consistent across different datasets or scenarios, it is recommended to use the same initial condition vector x(t) as used earlier when calculating our Jacobian Matrix M.
5. Finally, once we have calculated λ using the formula above, we can interpret its value in terms of stability/instability for our Time Series data:
- If λ < 0, then this indicates that the system is stable (i.e., nearby trajectories will converge towards each other over time).
- On the other hand, if λ > 0, then this implies that the system is unstable (i.e., nearby trajectories will diverge away from one another over time).
~ generated description from airoboros33b
---
Reference:
en.wikipedia.org
www.collimator.ai
blog.abhranil.net
www.researchgate.net
physics.stackexchange.com
---
This is a work in progress, it may contain errors so use with caution.
If you find flaws or suggest something new, please leave a comment bellow.
 _measure_function(i) 
  helper function to get the name of distance function by a index (0 -> 13).\
Functions: SSD, Euclidean, Manhattan, Minkowski, Chebyshev, Correlation, Cosine, Camberra, MAE, MSE, Lorentzian, Intersection, Penrose Shape, Meehl.
  Parameters:
     i (int) 
 _test(L) 
  Helper function to test the output exponents state system and outputs description into a string.
  Parameters:
     L (float ) 
 estimate(X, initial_distance, distance_function) 
  Estimate the Lyaponov Exponents for multiple series in a row matrix.
  Parameters:
     X (map) 
     initial_distance (float) : Initial distance limit.
     distance_function (string) : Name of the distance function to be used, default:`ssd`.
  Returns: List of Lyaponov exponents.
 max(L) 
  Maximal Lyaponov Exponent.
  Parameters:
     L (float ) : List of Lyapunov exponents.
  Returns: Highest exponent.
Contrast Color LibraryThis lightweight library provides a utility method that analyzes any provided background color and automatically chooses the optimal black or white foreground color to ensure maximum visual contrast and readability.
🟠  Algorithm 
The library utilizes the HSP Color Model to calculate the brightness of the background color. The formula for this calculation is as follows:
 brightness = sqrt(0.299 * R^2 + 0.587 * G^2 + 0.114 * B^2 ) 
The library chooses black as the foreground color if the brightness exceeds the threshold (default 0.5), and white otherwise.
two_ma_logicLibrary   "two_ma_logic" 
The core logic for the two moving average strategy that is used as an example for the internal logic of
the "Template Trailing Strategy" and the "Two MA Signal Indicator"
 ma(source, maType, length) 
  ma - Calculate the moving average of the given source for the given length and type of the average
  Parameters:
     source (float) : - The source of the values
     maType (simple string) : - The type of the moving average
     length (simple int) : - The length of the moving average
  Returns: - The resulted value of the calculations of the moving average
 getDealConditions(drawings, longDealsEnabled, shortDealsEnabled, endDealsEnabled, cnlStartDealsEnabled, cnlEndDealsEnabled, emaFilterEnabled, emaAtrBandEnabled, adxFilterEnabled, adxSmoothing, diLength, adxThreshold) 
  Parameters:
     drawings (TwoMaDrawings) 
     longDealsEnabled (simple bool) 
     shortDealsEnabled (simple bool) 
     endDealsEnabled (simple bool) 
     cnlStartDealsEnabled (simple bool) 
     cnlEndDealsEnabled (simple bool) 
     emaFilterEnabled (simple bool) 
     emaAtrBandEnabled (simple bool) 
     adxFilterEnabled (simple bool) 
     adxSmoothing (simple int) 
     diLength (simple int) 
     adxThreshold (simple float) 
 TwoMaDrawings 
  Fields:
     fastMA (series__float) 
     slowMA (series__float) 
     emaLine (series__float) 
     emaUpperBand (series__float) 
     emaLowerBand (series__float)
tts_conventionLibrary   "tts_convention" 
This library can convert the start, end, cancel start, cancel end deal conditions that are used in the
"Template Trailing Strategy" script into a signal value and vice versa. The "two channels mod div" convention is unsed
internaly and the signal value can be composed/decomposed into two channels that contain the afforementioned actions
for long and short positions separetely.
 getDealConditions(signal) 
  getDealConditions - Get the start, end, cancel start and cancel end deal conditions that are used in the "Template Trailing Strategy" script by decomposing the given signal
  Parameters:
     signal (int) : - The signal value to decompose
  Returns: An object with the start, end, cancel start and cancel end deal conditions for long and short
 getSignal(dealConditions) 
  getSignal - Get the signal value from the composition of the start, end, cancel start and cancel end deal conditions that are used in the "Template Trailing Strategy" script
  Parameters:
     dealConditions (DealConditions) : - The deal conditions object that containd the start, end, cancel start and cancel end deal conditions for long and short
  Returns: The composed signal value
 DealConditions 
  Fields:
     startLongDeal (series__bool) 
     startShortDeal (series__bool) 
     endLongDeal (series__bool) 
     endShortDeal (series__bool) 
     cnlStartLongDeal (series__bool) 
     cnlStartShortDeal (series__bool) 
     cnlEndLongDeal (series__bool) 
     cnlEndShortDeal (series__bool)
signal_datagramThe purpose of this library is to split and merge an integer into useful pieces of information that can easily handled and plotted.
The basic piece of information is one word. Depending on the underlying numerical system a word can be a bit, octal, digit, nibble, or byte.
The user can define channels. Channels are named groups of words. Multiple words can be combined to increase the value range of a channel.
A datagram is a description of the user-defined channels in an also user-defined numeric system that also contains all runtime information that is necessary to split and merge the integer.
This library simplifies the communication between two scripts by allowing the user to define the same datagram in both scripts.
On the sender's side, the channel values can be merged into one single integer value called signal. This signal can be 'emitted' using the plot function. The other script can use the 'input.source' function to receive that signal.
On the receiver's end based on the same datagram, the signal can be split into several channels. Each channel has the piece of information that the sender script put.
In the example of this library, we use two channels and we have split the integer in half. However, the user can add new channels, change them, and give meaning to them according to the functionality he wants to implement and the type of information he wants to communicate.
Nowadays many 'input.source' calls are allowed to pass information between the scripts, When that is not a price or a floating value, this library is very useful.
The reason is that most of the time, the convention that is used is not clear enough and it is easy to do things the wrong way or break them later on.
With this library validation checks are done during the initialization minimizing the possibility of error due to some misconceptions.
Library   "signal_datagram" 
Conversion of a datagram type to a signal that can be "send" as a single value from an indicator to a strategy script
 method init(this, positions, maxWords) 
  init - Initialize if the word positons array with an empty array
  Namespace types: WordPosArray
  Parameters:
     this (WordPosArray) : - The word positions array object
     positions (int ) : - The array that contains all the positions of the worlds that shape the channel
     maxWords (int) : - The maximum words allowed based on the span
  Returns: The initialized object
 method init(this) 
  init - Initialize if the channels word positons map with an empty map
  Namespace types: ChannelDesc
  Parameters:
     this (ChannelDesc) : - The channels' descriptor object
  Returns: The initialized object
 method init(this, numericSystem, channelDesc) 
  init - Initialize if the datagram
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object
     numericSystem (simple string) : - The numeric system of the words to be used
     channelDesc (ChannelDesc) : - The channels descriptor that contains the positions of the words that each channel consists of
  Returns: The initialized object
 method add_channel(this, name, positions) 
  add_channel - Add a new channel descriptopn with its name and its corresponding word positons to the map
  Namespace types: ChannelDesc
  Parameters:
     this (ChannelDesc) : - The channels' descriptor object to update
     name (simple string) 
     positions (int ) 
  Returns: The initialized object
 method set_signal(this, value) 
  set_signal - Set the signal value
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to update
     value (int) : - The signal value to set
 method get_signal(this) 
  get_signal - Get the signal value
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to query
  Returns: The value of the signal in digits
 method set_signal_sign(this, sign) 
  set_signal_sign - Set the signal sign
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to update
     sign (int) : - The negative -1 or positive 1 sign of the underlying value
 method get_signal_sign(this) 
  get_signal_sign - Get the signal sign
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to query
  Returns: The sign of the signal value -1 if it is negative and 1 if it is possitive
 method get_channel_names(this) 
  get_channel_names - Get an array of all channel names
  Namespace types: Datagram
  Parameters:
     this (Datagram) 
  Returns: An array that has all the channel names that are used by the datagram
 method set_channel_value(this, channelName, value) 
  set_channel_value - Set the value of the channel
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to update
     channelName (simple string) : - The name of the channel to set the value to. Then name should be as described int the schemas channel descriptor
     value (int) : - The channel value to set
 method set_all_channels_value(this, value) 
  set_all_channels_value - Set the value of all the channels
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to update
     value (int) : - The channel value to set
 method set_all_channels_max_value(this) 
  set_all_channels_value - Set the value of all the channels
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to update
 method get_channel_value(this, channelName) 
  get_channel_value - Get the value of the channel
  Namespace types: Datagram
  Parameters:
     this (Datagram) : - The datagram object to query
     channelName (simple string) 
  Returns: Digit group of words (bits/octals/digits/nibbles/hexes/bytes) found at the channel accodring to the schema
 WordDesc 
  Fields:
     numericSystem (series__string) 
     span (series__integer) 
 WordPosArray 
  Fields:
     positions (array__integer) 
 ChannelDesc 
  Fields:
     map (map__series__string:|WordPosArray|#OBJ) 
 Schema 
  Fields:
     wordDesc (|WordDesc|#OBJ) 
     channelDesc (|ChannelDesc|#OBJ) 
 Signal 
  Fields:
     value (series__integer) 
     isNegative (series__bool) 
     words (array__integer) 
 Datagram 
  Fields:
     schema (|Schema|#OBJ) 
     signal (|Signal|#OBJ)
FunctionMatrixCovarianceLibrary   "FunctionMatrixCovariance" 
In probability theory and statistics, a covariance matrix (also known as auto-covariance matrix, dispersion matrix, variance matrix, or variance–covariance matrix) is a square matrix giving the covariance between each pair of elements of a given random vector.
Intuitively, the covariance matrix generalizes the notion of variance to multiple dimensions. As an example, the variation in a collection of random points in two-dimensional space cannot be characterized fully by a single number, nor would the variances in the `x` and `y` directions contain all of the necessary information; a `2 × 2` matrix would be necessary to fully characterize the two-dimensional variation.
Any covariance matrix is symmetric and positive semi-definite and its main diagonal contains variances (i.e., the covariance of each element with itself).
The covariance matrix of a random vector `X` is typically denoted by `Kxx`, `Σ` or `S`.
~wikipedia.
 method cov(M, bias) 
  Estimate Covariance matrix with provided data.
  Namespace types: matrix
  Parameters:
     M (matrix) : `matrix`		Matrix with vectors in column order.
     bias (bool) 
  Returns: Covariance matrix of provided vectors.
---
en.wikipedia.org
numpy.org
Extended Moving Average (MA) LibraryThis Extended Moving Average Library is a sophisticated and comprehensive tool for traders seeking to expand their arsenal of moving averages for more nuanced and detailed technical analysis. 
The library contains various types of moving averages, each with two versions - one that accepts a simple constant length parameter and another that accepts a series or changing length parameter. 
This makes the library highly versatile and suitable for a wide range of strategies and trading styles.
Moving Averages Included:
    Simple Moving Average (SMA): This is the most basic type of moving average. It calculates the average of a selected range of prices, typically closing prices, by the number of periods in that range.
    Exponential Moving Average (EMA): This type of moving average gives more weight to the latest data and is thus more responsive to new price information. This can help traders to react faster to recent price changes.
    Double Exponential Moving Average (DEMA): This is a composite of a single exponential moving average, a double exponential moving average, and an exponential moving average of a triple exponential moving average. It aims to eliminate lag, which is a key drawback of using moving averages.
    Jurik Moving Average (JMA): This is a versatile and responsive moving average that can be adjusted for market speed. It is designed to stay balanced and responsive, regardless of how long or short it is.
    Kaufman's Adaptive Moving Average (KAMA): This moving average is designed to account for market noise or volatility. KAMA will closely follow prices when the price swings are relatively small and the noise is low.
    Smoothed Moving Average (SMMA): This type of moving average applies equal weighting to all observations and smooths out the data.
    Triangular Moving Average (TMA): This is a double smoothed simple moving average, calculated by averaging the simple moving averages of a dataset.
    True Strength Force (TSF): This is a moving average of the linear regression line, a statistical tool used to predict future values from past values.
    Volume Moving Average (VMA): This is a simple moving average of a volume, which can help to identify trends in volume.
    Volume Adjusted Moving Average (VAMA): This moving average adjusts for volume and can be more responsive to volume changes.
    Zero Lag Exponential Moving Average (ZLEMA): This type of moving average aims to eliminate the lag in traditional EMAs, making it more responsive to recent price changes.
    Selector: The selector function allows users to easily select and apply any of the moving averages included in the library inside their strategy.
This library provides a broad selection of moving averages to choose from, allowing you to experiment with different types and find the one that best suits your trading strategy. 
By providing both simple and series versions for each moving average, this library offers great flexibility, enabling users to pass both constant and changing length parameters as needed.
ta_mLibrary   "ta_m" 
This library is a Pine Script™ programmer’s tool containing calcs for my oscillators and some helper functions.
 upDnIntrabarVolumesByPolarity() 
  Determines if the volume for an intrabar is up or down.
  Returns: ( ) A tuple of two values, one of which contains the bar's volume. `upVol` is the positive volume of up bars. `dnVol` is the negative volume of down bars.
Note that when this function is designed to be called with `request.security_lower_tf()`,
which will return a tuple of "array" arrays containing up and dn volume for all the intrabars in a chart bar.
 upDnIntrabarVolumesByPrice() 
  Determines if the intrabar volume is up or down
  Returns: ( ) A tuple of two values, one of which contains the bar's volume. `upVol` is the positive volume of up bars. `dnVol` is the negative volume of down bars.
Note that when this function is designed to be called with `request.security_lower_tf()`,
which will return a tuple of "array" arrays containing up and dn volume for all the intrabars in a chart bar.
LibrarySupertrendLibrary   "LibrarySupertrend" 
 selective_ma(condition, source, length) 
  Parameters:
     condition (bool) 
     source (float) 
     length (int) 
 trendUp(source) 
  Parameters:
     source (float) 
 smoothrng(source, sampling_period, range_mult) 
  Parameters:
     source (float) 
     sampling_period (simple int) 
     range_mult (float) 
 rngfilt(source, smoothrng) 
  Parameters:
     source (float) 
     smoothrng (float) 
 fusion(overallLength, rsiLength, mfiLength, macdLength, cciLength, tsiLength, rviLength, atrLength, adxLength) 
  Parameters:
     overallLength (simple int) 
     rsiLength (simple int) 
     mfiLength (simple int) 
     macdLength (simple int) 
     cciLength (simple int) 
     tsiLength (simple int) 
     rviLength (simple int) 
     atrLength (simple int) 
     adxLength (simple int) 
 zonestrength(amplitude, wavelength) 
  Parameters:
     amplitude (int) 
     wavelength (simple int) 
 atr_anysource(source, atr_length) 
  Parameters:
     source (float) 
     atr_length (simple int) 
 supertrend_anysource(source, factor, atr_length) 
  Parameters:
     source (float) 
     factor (float) 
     atr_length (simple int)
lib_drawing_compositesLibrary   "lib_drawing_composites" 
methods to draw and manage composite obejects. Based on Trendoscope's  added Triangle and Polygon composite objects, fixed tostring method output to be actual json
 method tostring(this, format_date, format, tz, pretty) 
  Converts lib_drawing_types/LineProperties object to a json string representation
  Namespace types: D.Point
  Parameters:
     this (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) : lib_drawing_types/LineProperties object
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) : if true adds a line feed after every property and a space before properties (default: true)
  Returns: string representation of lib_drawing_types/LineProperties
 method tostring(this, pretty) 
  Converts lib_drawing_types/LabelProperties object to a json string representation
  Namespace types: D.LineProperties
  Parameters:
     this (LineProperties type from HeWhoMustNotBeNamed/DrawingTypes/2) : lib_drawing_types/LabelProperties object
     pretty (simple bool) : if true adds a line feed after every property and a space before properties (default: true)
  Returns: string representation of lib_drawing_types/LabelProperties
 method tostring(this, format_date, format, tz, pretty) 
  Converts lib_drawing_types/BoxProperties object to a json string representation
  Namespace types: D.Line
  Parameters:
     this (Line type from HeWhoMustNotBeNamed/DrawingTypes/2) : lib_drawing_types/BoxProperties object
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) : if true adds a line feed after every property and a space before properties (default: true)
  Returns: string representation of lib_drawing_types/BoxProperties
 method tostring(this, pretty) 
  Converts lib_drawing_types/BoxText object to a json string representation
  Namespace types: D.LabelProperties
  Parameters:
     this (LabelProperties type from HeWhoMustNotBeNamed/DrawingTypes/2) : lib_drawing_types/BoxText object
     pretty (simple bool) : if true adds a line feed after every property and a space before properties (default: true)
  Returns: string representation of lib_drawing_types/BoxText
 method tostring(this, format_date, format, tz, pretty) 
  Converts lib_drawing_types/TriangleProperties object to a json string representation
  Namespace types: D.Label
  Parameters:
     this (Label type from HeWhoMustNotBeNamed/DrawingTypes/2) : lib_drawing_types/TriangleProperties object
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) : if true adds a line feed after every property and a space before properties (default: true)
  Returns: string representation of lib_drawing_types/TriangleProperties
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: D.Linefill
  Parameters:
     this (Linefill type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method tostring(this, pretty) 
  Namespace types: D.BoxProperties
  Parameters:
     this (BoxProperties type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     pretty (simple bool) 
 method tostring(this, pretty) 
  Namespace types: D.BoxText
  Parameters:
     this (BoxText type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     pretty (simple bool) 
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: D.Box
  Parameters:
     this (Box type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method tostring(this, pretty) 
  Namespace types: DC.TriangleProperties
  Parameters:
     this (TriangleProperties type from robbatt/lib_drawing_composite_types/1) 
     pretty (simple bool) 
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: DC.Triangle
  Parameters:
     this (Triangle type from robbatt/lib_drawing_composite_types/1) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: DC.Trianglefill
  Parameters:
     this (Trianglefill type from robbatt/lib_drawing_composite_types/1) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: DC.Polygon
  Parameters:
     this (Polygon type from robbatt/lib_drawing_composite_types/1) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method tostring(this, format_date, format, tz, pretty) 
  Namespace types: DC.Polygonfill
  Parameters:
     this (Polygonfill type from robbatt/lib_drawing_composite_types/1) 
     format_date (simple bool) 
     format (simple string) 
     tz (simple string) 
     pretty (simple bool) 
 method delete(this) 
  Namespace types: DC.Trianglefill
  Parameters:
     this (Trianglefill type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Triangle
  Parameters:
     this (Triangle type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Triangle 
  Parameters:
     this (Triangle  type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Trianglefill 
  Parameters:
     this (Trianglefill  type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Polygon
  Parameters:
     this (Polygon type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Polygonfill
  Parameters:
     this (Polygonfill type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Polygon 
  Parameters:
     this (Polygon  type from robbatt/lib_drawing_composite_types/1) 
 method delete(this) 
  Namespace types: DC.Polygonfill 
  Parameters:
     this (Polygonfill  type from robbatt/lib_drawing_composite_types/1) 
 method clear(this) 
  Namespace types: DC.Triangle 
  Parameters:
     this (Triangle  type from robbatt/lib_drawing_composite_types/1) 
 method clear(this) 
  Namespace types: DC.Trianglefill 
  Parameters:
     this (Trianglefill  type from robbatt/lib_drawing_composite_types/1) 
 method clear(this) 
  Namespace types: DC.Polygon 
  Parameters:
     this (Polygon  type from robbatt/lib_drawing_composite_types/1) 
 method clear(this) 
  Namespace types: DC.Polygonfill 
  Parameters:
     this (Polygonfill  type from robbatt/lib_drawing_composite_types/1) 
 method draw(this, is_polygon_section) 
  Namespace types: DC.Triangle
  Parameters:
     this (Triangle type from robbatt/lib_drawing_composite_types/1) 
     is_polygon_section (bool) 
 method draw(this) 
  Namespace types: DC.Trianglefill
  Parameters:
     this (Trianglefill type from robbatt/lib_drawing_composite_types/1) 
 method draw(this, is_polygon) 
  Namespace types: DC.Triangle 
  Parameters:
     this (Triangle  type from robbatt/lib_drawing_composite_types/1) 
     is_polygon (bool) 
 method draw(this) 
  Namespace types: DC.Polygon
  Parameters:
     this (Polygon type from robbatt/lib_drawing_composite_types/1) 
 method draw(this) 
  Namespace types: DC.Trianglefill 
  Parameters:
     this (Trianglefill  type from robbatt/lib_drawing_composite_types/1) 
 method draw(this) 
  Namespace types: DC.Polygonfill
  Parameters:
     this (Polygonfill type from robbatt/lib_drawing_composite_types/1) 
 method draw(this) 
  Namespace types: DC.Polygon 
  Parameters:
     this (Polygon  type from robbatt/lib_drawing_composite_types/1) 
 method draw(this) 
  Namespace types: DC.Polygonfill 
  Parameters:
     this (Polygonfill  type from robbatt/lib_drawing_composite_types/1) 
 method createCenter(this, other) 
  Namespace types: D.Point
  Parameters:
     this (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     other (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
 method createCenter(this) 
  Namespace types: D.Point 
  Parameters:
     this (Point  type from HeWhoMustNotBeNamed/DrawingTypes/2) 
 method createCenter(this, other1, other2) 
  Namespace types: D.Point
  Parameters:
     this (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     other1 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     other2 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
 method createLabel(this, labeltext, tooltip, properties) 
  Namespace types: D.Line
  Parameters:
     this (Line type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     labeltext (string) 
     tooltip (string) 
     properties (LabelProperties type from HeWhoMustNotBeNamed/DrawingTypes/2) 
 method createLabel(this, labeltext, tooltip, properties) 
  Namespace types: DC.Triangle
  Parameters:
     this (Triangle type from robbatt/lib_drawing_composite_types/1) 
     labeltext (string) 
     tooltip (string) 
     properties (LabelProperties type from HeWhoMustNotBeNamed/DrawingTypes/2) 
 method createTriangle(this, p2, p3, properties) 
  Namespace types: D.Point
  Parameters:
     this (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     p2 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     p3 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     properties (TriangleProperties type from robbatt/lib_drawing_composite_types/1) 
 method createTrianglefill(this, fill_color, transparency) 
  Namespace types: DC.Triangle
  Parameters:
     this (Triangle type from robbatt/lib_drawing_composite_types/1) 
     fill_color (color) 
     transparency (int) 
 method createPolygonfill(this, fill_color, transparency) 
  Namespace types: DC.Polygon
  Parameters:
     this (Polygon type from robbatt/lib_drawing_composite_types/1) 
     fill_color (color) 
     transparency (int) 
 method createPolygon(points, properties) 
  Namespace types: D.Point 
  Parameters:
     points (Point  type from HeWhoMustNotBeNamed/DrawingTypes/2) 
     properties (TriangleProperties type from robbatt/lib_drawing_composite_types/1)
lib_drawing_composite_typesLibrary   "lib_drawing_composite_types" 
User Defined Types for basic drawing structure. Other types and methods will be built on these. (added type Triangle and Polygon to )
 TriangleProperties 
  TriangleProperties object
  Fields:
     border_color (series color) : Box border color. Default is color.blue
     fill_color (series color) : Fill color
     fill_transparency (series int) 
     border_width (series int) : Box border width. Default is 1
     border_style (series string) : Box border style. Default is line.style_solid
     xloc (series string) : defines if drawing needs to be done based on bar index or time. default is xloc.bar_index
 Triangle 
  Triangle object
  Fields:
     p1 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) : point one
     p2 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) : point two
     p3 (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) : point three
     properties (TriangleProperties) : Triangle properties
     l12 (series line) : line object created
     l23 (series line) : line object created
     l31 (series line) : line object created
 Trianglefill 
  Trianglefill object
  Fields:
     triangle (Triangle) : to create a linefill for
     fill_color (series color) : Fill color
     transparency (series int) : Fill transparency range from 0 to 100
     object (series linefill) : linefill object created
 Polygon 
  Polygon object
  Fields:
     center (Point type from HeWhoMustNotBeNamed/DrawingTypes/2) : Point that triangles are using as common center
     triangles (Triangle ) : an array of triangles that form the Polygon
 Polygonfill 
  Polygonfill object
  Fields:
     _polygon (Polygon) : to create a fill for
     _fills (Trianglefill ) : an array of Trianglefill objects that match the array of triangles in _polygon
Risk ManagementLibrary   "RiskManagement" 
This library keeps your money in check, and is used for testing and later on webhook-applications too. It has four volatility functions and two of them can be used to calculate a Stop-Loss, like Average True Range. It also can calculate Position Size, and the Risk Reward Ratio. But those calculations don't take leverage into account.
 position_size(portfolio, risk, entry, stop_loss, use_leverage, qty_as_integer) 
  This function calculates the definite amount of contracts/shares/units you should use to buy or sell.  This value can used by `strategy.entry(qty)` for example.
  Parameters:
     portfolio (float) : This is the total amount of the currency you own, and is also used by strategy.initial_capital, for example. The amount is needed to calculate the maximum risk you are willing to take per trade.
     risk (float) : This is the percentage of your Portfolio you willing to loose on a single trade. Possible values are between 0.1 and 100%. Same usecase with strategy(default_qty_type=strategy.percent_of_equity,default_qty_value=100), except its calculation the risk only.
     entry (float) : This is the limit-/market-price for the investment. In other words: The price per contract/share/unit you willing to buy or sell.
     stop_loss (float) : This is the limit-/market-price when to exit the trade, to minimize your losses.
     use_leverage (bool) : This value is optional. When not used or when set to false then this function will let you invest your portfolio at max. 
     qty_as_integer (bool) : This value is optional. When set to true this function will return a value used with integers. The largest integer less than or equal to the given number. Because some Broker/Exchanges let you trade hole contracts/shares/units only.
  Returns: float
 position_size_currency(portfolio, risk, entry, stop_loss) 
  This function calculates the definite amount of currency you should use when going long or short.
  Parameters:
     portfolio (float) : This is the total amount of the currency you own, and is also used by strategy.initial_capital, for example. The amount is needed to calculate the maximum risk you are willing to take per trade.
     risk (float) : This is the percentage of your Portfolio you willing to loose on a single trade. For example: 1 is 100% and 0,01 is 1%. Default amount is 0.02 (2%).
     entry (float) : This is the limit-/market-price for the current investment. In other words: The price per contract/share/units you willing to buy or sell.
     stop_loss (float) : This is the limit-/market-price when to exit the trade, to minimize your losses.
  Returns: float
 rrr(entry, stop_loss, take_profit) 
  This function calculates the Risk Reward Ratio. Common values are between 1.5 and 2.0 and you should not go lower except for very few special cases.
  Parameters:
     entry (float) : This is the limit-/market-price for the investment. In other words: The price per contract/share/unit you willing to buy or sell.
     stop_loss (float) : This is the limit-/market-price when to exit the trade, to minimize your losses.
     take_profit (float) : This is the limit-/market-price when to take profits.
  Returns: float
 change_in_price(length) 
  This function calculates the difference between price now and close price of the candle 'n' bars before that. If prices are very volatile but closed where they began, then this method would show zero volatility. Over many calculations, this method returns a reasonable measure of volatility, but will always be lower than those using the highs and lows.
  Parameters:
     length (int) : The length is needed to determine how many candles/bars back should take into account.
  Returns: float
 maximum_price_fluctuation(length) 
  This function measures volatility over most recent candles, which could be used as an estimate of risk. It may also be effective as the basis for a stop-loss or take-profit, like the ATR but it ignores the frequency of directional changes within the time interval. In other words: The difference between the highest high and lowest low over 'n' bars.
  Parameters:
     length (int) : The length is needed to determine how many candles/bars back should take into account.
  Returns: float
 absolute_price_changes(length) 
  This function measures volatility over most recent close prices. This is excellent for comparing volatility. It includes both frequency and magnitude. In other words: Sum of differences between second to last close price and last close price as absolute value for 'n' bars.
  Parameters:
     length (int) : The length is needed to determine how many candles/bars back should take into account.
  Returns: float
 annualized_volatility(length) 
  This function measures volatility over most recent close prices. Its the standard deviation of close over the past 'n' periods, times the square root of the number of periods in a year.
  Parameters:
     length (int) : The length is needed to determine how many candles/bars back should take into account.
  Returns: float
AlgebraLibLibrary   "AlgebraLib" 
 f_signaldraw(_side, _date) 
  : Draw a simple label with Buy or Sell signal
  Parameters:
     _side (string) 
     _date (int) 
  Returns: : VOID, it draws a new label
KernelFunctionsFiltersLibrary   "KernelFunctionsFilters" 
This library provides filters for non-repainting kernel functions for Nadaraya-Watson estimator implementations made by @jdehorty. Filters include a smoothing formula and zero lag formula. You can find examples in the code. For more information check out the original library KernelFunctions.
 rationalQuadratic(_src, _lookback, _relativeWeight, startAtBar, _filter) 
  Parameters:
     _src (float) 
     _lookback (simple int) 
     _relativeWeight (simple float) 
     startAtBar (simple int) 
     _filter (simple string) 
 gaussian(_src, _lookback, startAtBar, _filter) 
  Parameters:
     _src (float) 
     _lookback (simple int) 
     startAtBar (simple int) 
     _filter (simple string) 
 periodic(_src, _lookback, _period, startAtBar, _filter) 
  Parameters:
     _src (float) 
     _lookback (simple int) 
     _period (simple int) 
     startAtBar (simple int) 
     _filter (simple string) 
 locallyPeriodic(_src, _lookback, _period, startAtBar, _filter) 
  Parameters:
     _src (float) 
     _lookback (simple int) 
     _period (simple int) 
     startAtBar (simple int) 
     _filter (simple string) 
 j(line1, line2) 
  Parameters:
     line1 (float) 
     line2 (float)
Vector3Library   "Vector3" 
Representation of 3D vectors and points.
This structure is used to pass 3D positions and directions around. It also contains functions for doing common vector operations.
Besides the functions listed below, other classes can be used to manipulate vectors and points as well. 
For example the Quaternion and the Matrix4x4 classes are useful for rotating or transforming vectors and points.
___
**Reference:**
- github.com
- github.com
- github.com
- www.movable-type.co.uk
- docs.unity3d.com
- referencesource.microsoft.com
- github.com
\
 new(x, y, z) 
  Create a new `Vector3`.
  Parameters:
     x (float) : `float` Property `x` value, (optional, default=na).
     y (float) : `float` Property `y` value, (optional, default=na).
     z (float) : `float` Property `z` value, (optional, default=na).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.new(1.1, 1, 1)
```
 from(value) 
  Create a new `Vector3` from a single value.
  Parameters:
     value (float) : `float` Properties positional value, (optional, default=na).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.from(1.1)
```
 from_Array(values, fill_na) 
  Create a new `Vector3` from a list of values, only reads up to the third item.
  Parameters:
     values (float ) : `array` Vector property values.
     fill_na (float) : `float`        Parameter value to replace missing indexes, (optional, defualt=na).
  Returns: `Vector3` Generated new vector.
___
**Notes:**
- Supports any size of array, fills non available fields with `na`.
___
**Usage:**
```
.from_Array(array.from(1.1, fill_na=33))
.from_Array(array.from(1.1, 2, 3))
```
 from_Vector2(values) 
  Create a new `Vector3` from a `Vector2`.
  Parameters:
     values (Vector2 type from RicardoSantos/CommonTypesMath/1) : `Vector2` Vector property values.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.from:Vector2(.Vector2.new(1, 2.0))
```
___
**Notes:**
- Type `Vector2` from CommonTypesMath library.
 from_Quaternion(values) 
  Create a new `Vector3` from a `Quaternion`'s `x, y, z` properties.
  Parameters:
     values (Quaternion type from RicardoSantos/CommonTypesMath/1) : `Quaternion` Vector property values.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.from_Quaternion(.Quaternion.new(1, 2, 3, 4))
```
___
**Notes:**
- Type `Quaternion` from CommonTypesMath library.
 from_String(expression, separator, fill_na) 
  Create a new `Vector3` from a list of values in a formated string.
  Parameters:
     expression (string) : `array`	String with the list of vector properties.
     separator (string) : `string`		Separator between entries, (optional, default=`","`).
     fill_na (float) : `float`			Parameter value to replace missing indexes, (optional, defualt=na).
  Returns: `Vector3` Generated new vector.
___
**Notes:**
- Supports any size of array, fills non available fields with `na`.
- `",,"` Empty fields will be ignored.
___
**Usage:**
```
.from_String("1.1", fill_na=33))
.from_String("(1.1,, 3)") // 1.1 , 3.0, NaN // empty field will be ignored!!
```
 back() 
  Create a new `Vector3` object in the form `(0, 0, -1)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.back()
```
 front() 
  Create a new `Vector3` object in the form `(0, 0, 1)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.front()
```
 up() 
  Create a new `Vector3` object in the form `(0, 1, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.up()
```
 down() 
  Create a new `Vector3` object in the form `(0, -1, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.down()
```
 left() 
  Create a new `Vector3` object in the form `(-1, 0, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.left()
```
 right() 
  Create a new `Vector3` object in the form `(1, 0, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.right()
```
 zero() 
  Create a new `Vector3` object in the form `(0, 0, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.zero()
```
 one() 
  Create a new `Vector3` object in the form `(1, 1, 1)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.one()
```
 minus_one() 
  Create a new `Vector3` object in the form `(-1, -1, -1)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.minus_one()
```
 unit_x() 
  Create a new `Vector3` object in the form `(1, 0, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.unit_x()
```
 unit_y() 
  Create a new `Vector3` object in the form `(0, 1, 0)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.unit_y()
```
 unit_z() 
  Create a new `Vector3` object in the form `(0, 0, 1)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.unit_z()
```
 nan() 
  Create a new `Vector3` object in the form `(na, na, na)`.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.nan()
```
 random(max, min) 
  Generate a vector with random properties.
  Parameters:
     max (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Maximum defined range of the vector properties.
     min (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Minimum defined range of the vector properties.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.random(.from(math.pi), .from(-math.pi))
```
 random(max) 
  Generate a vector with random properties (min set to 0.0).
  Parameters:
     max (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Maximum defined range of the vector properties.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
.random(.from(math.pi))
```
 method copy(this) 
  Copy a existing `Vector3`
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .one().copy()
```
 method i_add(this, other) 
  Modify a instance of a vector by adding a vector to it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_add(.up())
```
 method i_add(this, value) 
  Modify a instance of a vector by adding a vector to it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     value (float) : `float`		Value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_add(3.2)
```
 method i_subtract(this, other) 
  Modify a instance of a vector by subtracting a vector to it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_subtract(.down())
```
 method i_subtract(this, value) 
  Modify a instance of a vector by subtracting a vector to it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     value (float) : `float`		Value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_subtract(3)
```
 method i_multiply(this, other) 
  Modify a instance of a vector by multiplying a vector with it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_multiply(.left())
```
 method i_multiply(this, value) 
  Modify a instance of a vector by multiplying a vector with it.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     value (float) : `float`	value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_multiply(3)
```
 method i_divide(this, other) 
  Modify a instance of a vector by dividing it by another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_divide(.forward())
```
 method i_divide(this, value) 
  Modify a instance of a vector by dividing it by another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     value (float) : `float`	Value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_divide(3)
```
 method i_mod(this, other) 
  Modify a instance of a vector by modulo assignment with another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_mod(.back())
```
 method i_mod(this, value) 
  Modify a instance of a vector by modulo assignment with another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     value (float) : `float`		Value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_mod(3)
```
 method i_pow(this, exponent) 
  Modify a instance of a vector by modulo assignment with another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     exponent (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Exponent Vector.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_pow(.up())
```
 method i_pow(this, exponent) 
  Modify a instance of a vector by modulo assignment with another vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     exponent (float) : `float`		Exponent Value.
  Returns: `Vector3` Updated source vector.
___
**Usage:**
```
a = .from(1)		, a.i_pow(2)
```
 method length_squared(this) 
  Squared length of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) 
  Returns: `float` The squared length of this vector.
___
**Usage:**
```
a = .one().length_squared()
```
 method magnitude_squared(this) 
  Squared magnitude of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `float` The length squared of this vector.
___
**Usage:**
```
a = .one().magnitude_squared()
```
 method length(this) 
  Length of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `float` The length of this vector.
___
**Usage:**
```
a = .one().length()
```
 method magnitude(this) 
  Magnitude of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `float` The Length of this vector.
___
**Usage:**
```
a = .one().magnitude()
```
 method normalize(this, magnitude, eps) 
  Normalize a vector with a magnitude of 1(optional).
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     magnitude (float) : `float`		Value to manipulate the magnitude of normalization, (optional, default=1.0).
     eps (float) 
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .new(33, 50, 100).normalize()	// (x=0.283, y=0.429, z=0.858)
a = .new(33, 50, 100).normalize(2)	// (x=0.142, y=0.214, z=0.429)
```
 method to_String(this, precision) 
  Converts source vector to a string format, in the form `"(x, y, z)"`.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector. 
     precision (string) : `string`  Precision format to apply to values (optional, default='').
  Returns: `string` Formated string in a `"(x, y, z)"` format.
___
**Usage:**
```
a = .one().to_String("#.###")
```
 method to_Array(this) 
  Converts source vector to a array format.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector. 
  Returns: `array` List of the vector properties.
___
**Usage:**
```
a = .new(1, 2, 3).to_Array()
```
 method to_Vector2(this) 
  Converts source vector to a Vector2 in the form `x, y`.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector2` Generated new vector.
___
**Usage:**
```
a = .from(1).to_Vector2()
```
 method to_Quaternion(this, w) 
  Converts source vector to a Quaternion in the form `x, y, z, w`.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Sorce vector.
     w (float) : `float`   Property of `w` new value.
  Returns: `Quaternion` Generated new vector.
___
**Usage:**
```
a = .from(1).to_Quaternion(w=1)
```
 method add(this, other) 
  Add a vector to source vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).add(.unit_z())
```
 method add(this, value) 
  Add a value to each property of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     value (float) : `float`   Value.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).add(2.0)
```
 add(value, other) 
  Add each property of a vector to a base value as a new vector.
  Parameters:
     value (float) : `float`   Value.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(2)		, b = .add(1.0, a)
```
 method subtract(this, other) 
  Subtract vector from source vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).subtract(.left())
```
 method subtract(this, value) 
  Subtract a value from each property in source vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     value (float) : `float`   Value.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).subtract(2.0)
```
 subtract(value, other) 
  Subtract each property in a vector from a base value and create a new vector.
  Parameters:
     value (float) : `float`   Value.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .subtract(1.0, .right())
```
 method multiply(this, other) 
  Multiply a vector by another.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).multiply(.up())
```
 method multiply(this, value) 
  Multiply each element in source vector with a value.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     value (float) : `float`   Value.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).multiply(2.0)
```
 multiply(value, other) 
  Multiply a value with each property in a vector and create a new vector.
  Parameters:
     value (float) : `float`   Value.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .multiply(1.0, .new(1, 2, 1))
```
 method divide(this, other) 
  Divide a vector by another.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).divide(.from(2))
```
 method divide(this, value) 
  Divide each property in a vector by a value.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     value (float) : `float`   Value.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).divide(2.0)
```
 divide(value, other) 
  Divide a base value by each property in a vector and create a new vector.
  Parameters:
     value (float) : `float`   Value.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .divide(1.0, .from(2))
```
 method mod(this, other) 
  Modulo a vector by another.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).mod(.from(2))
```
 method mod(this, value) 
  Modulo each property in a vector by a value.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     value (float) : `float`   Value.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).mod(2.0)
```
 mod(value, other) 
  Modulo a base value by each property in a vector and create a new vector.
  Parameters:
     value (float) : `float`   Value.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .mod(1.0, .from(2))
```
 method negate(this) 
  Negate a vector in the form `(zero - this)`.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .one().negate()
```
 method pow(this, other) 
  Modulo a vector by another.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(2).pow(.from(3))
```
 method pow(this, exponent) 
  Raise the vector elements by a exponent.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     exponent (float) : `float`   The exponent to raise the vector by.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).pow(2.0)
```
 pow(value, exponent) 
  Raise value into a vector raised by the elements in exponent vector.
  Parameters:
     value (float) : `float`   Base value.
     exponent (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` The exponent to raise the vector of base value by.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .pow(1.0, .from(2))
```
 method sqrt(this) 
  Square root of the elements in a vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).sqrt()
```
 method abs(this) 
  Absolute properties of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).abs()
```
 method max(this) 
  Highest property of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `float` Highest value amongst the vector properties.
___
**Usage:**
```
a = .new(1, 2, 3).max()
```
 method min(this) 
  Lowest element of the vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `float` Lowest values amongst the vector properties.
___
**Usage:**
```
a = .new(1, 2, 3).min()
```
 method floor(this) 
  Floor of vector a.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .new(1.33, 1.66, 1.99).floor()
```
 method ceil(this) 
  Ceil of vector a.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .new(1.33, 1.66, 1.99).ceil()
```
 method round(this) 
  Round of vector elements.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .new(1.33, 1.66, 1.99).round()
```
 method round(this, precision) 
  Round of vector elements to n digits.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 	Source vector.
     precision (int) : `int`		Number of digits to round the vector elements.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .new(1.33, 1.66, 1.99).round(1)	// 1.3, 1.7, 2
```
 method fractional(this) 
  Fractional parts of vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1.337).fractional()	// 0.337
```
 method dot_product(this, other) 
  Dot product of two vectors.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other vector.
  Returns: `float` Dot product.
___
**Usage:**
```
a = .from(2).dot_product(.left())
```
 method cross_product(this, other) 
  Cross product of two vectors.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).cross_produc(.right())
```
 method scale(this, scalar) 
  Scale vector by a scalar value.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 	Source vector.
     scalar (float) : `float`		Value to scale the the vector by.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).scale(2)
```
 method rescale(this, magnitude) 
  Rescale a vector to a new magnitude.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     magnitude (float) : `float`		Value to manipulate the magnitude of normalization.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(20).rescale(1)
```
 method equals(this, other) 
  Compares two vectors.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     other (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Other vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).equals(.one())
```
 method sin(this) 
  Sine of vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).sin()
```
 method cos(this) 
  Cosine of vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).cos()
```
 method tan(this) 
  Tangent of vector.
  Namespace types: TMath.Vector3
  Parameters:
     this (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .from(1).tan()
```
 vmax(a, b) 
  Highest elements of the properties from two vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .vmax(.one(), .from(2))
```
 vmax(a, b, c) 
  Highest elements of the properties from three vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     c (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector. 
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .vmax(.new(0.1, 2.5, 3.4), .from(2), .from(3))
```
 vmin(a, b) 
  Lowest elements of the properties from two vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`  	Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .vmin(.one(), .from(2))
```
 vmin(a, b, c) 
  Lowest elements of the properties from three vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
     c (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .vmin(.one(), .from(2), .new(3.3, 2.2, 0.5))
```
 distance(a, b) 
  Distance between vector `a` and `b`.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Target vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = distance(.from(3), .unit_z())
```
 clamp(a, min, max) 
  Restrict a vector between a min and max vector.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     min (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Minimum boundary vector.
     max (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Maximum boundary vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .clamp(a=.new(2.9, 1.5, 3.9), min=.from(2), max=.new(2.5, 3.0, 3.5))
```
 clamp_magnitude(a, radius) 
  Vector with its magnitude clamped to a radius.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.object, vector with properties that should be restricted to a radius.
     radius (float) : `float`		Maximum radius to restrict magnitude of vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .clamp_magnitude(.from(21), 7)
```
 lerp_unclamped(a, b, rate) 
  `Unclamped` linearly interpolates between provided vectors by a rate.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Target vector.
     rate (float) : `float`		Rate of interpolation, range(0 > 1) where 0 == source vector and 1 == target vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .lerp_unclamped(.from(1), .from(2), 1.2)
```
 lerp(a, b, rate) 
  Linearly interpolates between provided vectors by a rate.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Target vector.
     rate (float) : `float`		Rate of interpolation, range(0 > 1) where 0 == source vector and 1 == target vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = lerp(.one(), .from(2), 0.2)
```
 herp(start, start_tangent, end, end_tangent, rate) 
  Hermite curve interpolation between provided vectors.
  Parameters:
     start (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Start vector.
     start_tangent (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Start vector tangent.
     end (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	End vector.
     end_tangent (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	End vector tangent.
     rate (int) : `float`		Rate of the movement from `start` to `end` to get position, should be range(0 > 1).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
s = .new(0, 0, 0)		, st = .new(0, 1, 1)
e = .new(1, 2, 2)		, et = .new(-1, -1, 3)
h = .herp(s, st, e, et, 0.3)
```
___
**Reference:**	en.m.wikibooks.org
 herp_2(a, b, rate) 
  Hermite curve interpolation between provided vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Target vector.
     rate (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Rate of the movement per component from `start` to `end` to get position, should be range(0 > 1).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
h = .herp_2(.one(), .new(0.1, 3, 2), 0.6)
```
 noise(a) 
  3D Noise based on Morgan McGuire @morgan3d
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = noise(.one())
```
___
**Reference:**
- thebookofshaders.com
- www.shadertoy.com
 rotate(a, axis, angle) 
  Rotate a vector around a axis.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     axis (string) : `string`	The plane to rotate around, `option="x", "y", "z"`.
     angle (float) : `float`		Angle in radians.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .rotate(.from(3), 'y', math.toradians(45.0))
```
 rotate_x(a, angle) 
  Rotate a vector on a fixed `x`.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 	Source vector.
     angle (float) : `float`		Angle in radians.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .rotate_x(.from(3), math.toradians(90.0))
```
 rotate_y(a, angle) 
  Rotate a vector on a fixed `y`.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     angle (float) : `float`		Angle in radians.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .rotate_y(.from(3), math.toradians(90.0))
```
 rotate_yaw_pitch(a, yaw, pitch) 
  Rotate a vector by yaw and pitch values.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 	Source vector.
     yaw (float) : `float`		Angle in radians.
     pitch (float) : `float`		Angle in radians.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .rotate_yaw_pitch(.from(3), math.toradians(90.0), math.toradians(45.0))
```
 project(a, normal, eps) 
  Project a vector off a plane defined by a normal.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     normal (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	The normal of the surface being reflected off.
     eps (float) : `float`		Minimum resolution to void division by zero (default=0.000001).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .project(.one(), .down())
```
 project_on_plane(a, normal, eps) 
  Projects a vector onto a plane defined by a normal orthogonal to the plane.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     normal (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	The normal of the surface being reflected off.
     eps (float) : `float`		Minimum resolution to void division by zero (default=0.000001).
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .project_on_plane(.one(), .left())
```
 project_to_2d(a, camera_position, camera_target) 
  Project a vector onto a two dimensions plane.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     camera_position (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Camera position.
     camera_target (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Camera target plane position.
  Returns: `Vector2` Generated new vector.
___
**Usage:**
```
a = .project_to_2d(.one(), .new(2, 2, 3), .zero())
```
 reflect(a, normal) 
  Reflects a vector off a plane defined by a normal.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     normal (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	The normal of the surface being reflected off.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .reflect(.one(), .right())
```
 angle(a, b, eps) 
  Angle in degrees between two vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Target vector.
     eps (float) : `float`		Minimum resolution to void division by zero (default=1.0e-15).
  Returns: `float` Angle value in degrees.
___
**Usage:**
```
a = .angle(.one(), .up())
```
 angle_signed(a, b, axis) 
  Signed angle in degrees between two vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Target vector.
     axis (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` Axis vector.
  Returns: `float` Angle value in degrees.
___
**Usage:**
```
a = .angle_signed(.one(), .left(), .down())
```
___
**Notes:**
- The smaller of the two possible angles between the two vectors is returned, therefore the result will never 
be greater than 180 degrees or smaller than -180 degrees.
- If you imagine the from and to vectors as lines on a piece of paper, both originating from the same point, 
then the /axis/ vector would point up out of the paper.
- The measured angle between the two vectors would be positive in a clockwise direction and negative in an 
anti-clockwise direction.
___
**Reference:**
- github.com
 angle2d(a, b) 
  2D angle between two vectors.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     b (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Target vector.
  Returns: `float` Angle value in degrees.
___
**Usage:**
```
a = .angle2d(.one(), .left())
```
 transform_Matrix(a, M) 
  Transforms a vector by the given matrix.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     M (matrix) : `matrix` A 4x4 matrix. The transformation matrix.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
mat = matrix.new(4, 0)
mat.add_row(0, array.from(0.0, 0.0, 0.0, 1.0))
mat.add_row(1, array.from(0.0, 0.0, 1.0, 0.0))
mat.add_row(2, array.from(0.0, 1.0, 0.0, 0.0))
mat.add_row(3, array.from(1.0, 0.0, 0.0, 0.0))
b = .transform_Matrix(.one(), mat)
```
 transform_M44(a, M) 
  Transforms a vector by the given matrix.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`	Source vector.
     M (M44 type from RicardoSantos/CommonTypesMath/1) : `M44` 		A 4x4 matrix. The transformation matrix.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .transform_M44(.one(), .M44.new(0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0))
```
___
**Notes:**
- Type `M44` from `CommonTypesMath` library.
 transform_normal_Matrix(a, M) 
  Transforms a vector by the given matrix.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 		Source vector.
     M (matrix) : `matrix`	A 4x4 matrix. The transformation matrix.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
mat = matrix.new(4, 0)
mat.add_row(0, array.from(0.0, 0.0, 0.0, 1.0))
mat.add_row(1, array.from(0.0, 0.0, 1.0, 0.0))
mat.add_row(2, array.from(0.0, 1.0, 0.0, 0.0))
mat.add_row(3, array.from(1.0, 0.0, 0.0, 0.0))
b = .transform_normal_Matrix(.one(), mat)
```
 transform_normal_M44(a, M) 
  Transforms a vector by the given matrix.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3` 		Source vector.
     M (M44 type from RicardoSantos/CommonTypesMath/1) : `M44`	A 4x4 matrix. The transformation matrix.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .transform_normal_M44(.one(), .M44.new(0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0))
```
___
**Notes:**
- Type `M44` from `CommonTypesMath` library.
 transform_Array(a, rotation) 
  Transforms a vector by the given Quaternion rotation value.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`		Source vector. The source vector to be rotated.
     rotation (float ) : `array`	A 4 element array. Quaternion. The rotation to apply.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .transform_Array(.one(), array.from(0.2, 0.2, 0.2, 1.0))
```
___
**Reference:**
- referencesource.microsoft.com
 transform_Quaternion(a, rotation) 
  Transforms a vector by the given Quaternion rotation value.
  Parameters:
     a (Vector3 type from RicardoSantos/CommonTypesMath/1) : `Vector3`		Source vector. The source vector to be rotated.
     rotation (Quaternion type from RicardoSantos/CommonTypesMath/1) : `array`	A 4 element array. Quaternion. The rotation to apply.
  Returns: `Vector3` Generated new vector.
___
**Usage:**
```
a = .transform_Quaternion(.one(), .Quaternion.new(0.2, 0.2, 0.2, 1.0))
```
___
**Notes:**
- Type `Quaternion` from `CommonTypesMath` library.
___
**Reference:**
- referencesource.microsoft.com






















