# 7.1. Math Stdlib

## 7.1.1. Builtin

### 7.1.1.1. Constans

• inf or Infinity

• -inf or -Infinity

• 1e6 or 1e-4

### 7.1.1.2. Functions

• abs()

• round()

• pow()

• sum()

• min()

• max()

• divmod()

• complex()

## 7.1.2. math

### 7.1.2.1. Constants

import math

math.pi         # The mathematical constant π = 3.141592…, to available precision.
math.e          # The mathematical constant e = 2.718281…, to available precision.
math.tau        # The mathematical constant τ = 6.283185…, to available precision.


import math

math.degrees(x)     # Convert angle x from radians to degrees.


### 7.1.2.3. Rounding to lower

import math

math.floor(3.14)                # 3
math.floor(3.00000000000000)    # 3
math.floor(3.00000000000001)    # 3
math.floor(3.99999999999999)    # 3


### 7.1.2.4. Rounding to higher

import math

math.ceil(3.14)                 # 4
math.ceil(3.00000000000000)     # 3
math.ceil(3.00000000000001)     # 4
math.ceil(3.99999999999999)     # 4


### 7.1.2.5. Logarithms

import math

math.log(x)     # if base is not set, then e
math.log(x, base=2)
math.log(x, base=10)
math.log10()    # Return the base-10 logarithm of x. This is usually more accurate than log(x, 10).
math.log2(x)    # Return the base-2 logarithm of x. This is usually more accurate than log(x, 2).

math.exp(x)


### 7.1.2.6. Linear Algebra

import math

math.sqrt(x)     # Return the square root of x.
math.pow(x, y)   # Return x raised to the power y.

import math

math.hypot(*coordinates)    # 2D, since Python 3.8 also multiple dimensions
math.dist(p, q)             # Euclidean distance, since Python 3.8
math.gcd(*integers)         # Greatest common divisor
math.lcm(*integers)         # Least common multiple, since Python 3.9
math.perm(n, k=None)        # Return the number of ways to choose k items from n items without repetition and with order.
math.prod(iterable, *, start=1)  # Calculate the product of all the elements in the input iterable. The default start value for the product is 1., since Python 3.8
math.remainder(x, y)        # Return the IEEE 754-style remainder of x with respect to y.


### 7.1.2.7. Trigonometry

import math

math.sin()
math.cos()
math.tan()

math.asin(x)
math.acos(x)
math.atan(x)
math.atan2(x)

Listing 282. Hyperbolic functions
import math

math.sinh()         # Return the hyperbolic sine of x.
math.cosh()         # Return the hyperbolic cosine of x.
math.tanh()         # Return the hyperbolic tangent of x.

math.asinh(x)       # Return the inverse hyperbolic sine of x.
math.acosh(x)       # Return the inverse hyperbolic cosine of x.
math.atanh(x)       # Return the inverse hyperbolic tangent of x.


### 7.1.2.8. Infinity

float('inf')                # inf
float('-inf')               # -inf
float('Infinity')           # inf
float('-Infinity')          # -inf

from math import isinf

isinf(float('inf'))         # True
isinf(float('Infinity'))    # True
isinf(float('-inf'))        # True
isinf(float('-Infinity'))   # True

isinf(1e308)                # False
isinf(1e309)                # True

isinf(1e-9999999999999999)  # False


### 7.1.2.9. Absolute value

abs(1)          # 1
abs(-1)         # 1

abs(1.2)        # 1.2
abs(-1.2)       # 1.2

from math import fabs

fabs(1)         # 1.0
fabs(-1)        # 1.0

fabs(1.2)       # 1.2
fabs(-1.2)      # 1.2

from math import fabs

vector = [1, 0, 1]

abs(vector)
# TypeError: bad operand type for abs(): 'list'

fabs(vector)
# TypeError: must be real number, not list

from math import sqrt

def vector_abs(vector):
return sqrt(sum(n**2 for n in vector))

vector = [1, 0, 1]
vector_abs(vector)
# 1.4142135623730951

from math import sqrt

class Vector:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

def __abs__(self):
return sqrt(self.x**2 + self.y**2 + self.z**2)

vector = Vector(x=1, y=0, z=1)
abs(vector)
# 1.4142135623730951


## 7.1.3. Assignments

### 7.1.3.1. Trigonometry

• Complexity level: easy

• Lines of code to write: 10 lines

• Estimated time of completion: 10 min

English
1. Read input (angle in degrees) from user

2. User will type int or float

3. Print all trigonometric functions (sin, cos, tg, ctg)

4. If there is no value for this angle, raise an exception

Polish
1. Program wczytuje od użytkownika wielkość kąta w stopniach

2. Użytkownik zawsze podaje int albo float

3. Wyświetl wartość funkcji trygonometrycznych (sin, cos, tg, ctg)

4. Jeżeli funkcja trygonometryczna nie istnieje dla danego kąta podnieś stosowny wyjątek

Hint
• input('Type angle [deg]: ')

### 7.1.3.2. Euclidean distance 2D

• Complexity level: easy

• Lines of code to write: 5 lines

• Estimated time of completion: 15 min

English
1. Given are two points A: Tuple[int, int] and B: Tuple[int, int]

2. Coordinates are in cartesian system

3. Points A and B are in two dimensional space

4. Calculate distance between points using Euclidean algorithm

5. Function must pass doctest

Polish
1. Dane są dwa punkty A: Tuple[int, int] i B: Tuple[int, int]

2. Koordynaty są w systemie kartezjańskim

3. Punkty A i B są w dwuwymiarowej przestrzeni

4. Oblicz odległość między nimi wykorzystując algorytm Euklidesa

5. Funkcja musi przechodzić doctest

Input
def euclidean_distance(A, B):
"""
>>> A = (1, 0)
>>> B = (0, 1)
>>> euclidean_distance(A, B)
1.4142135623730951

>>> euclidean_distance((0,0), (1,0))
1.0

>>> euclidean_distance((0,0), (1,1))
1.4142135623730951

>>> euclidean_distance((0,1), (1,1))
1.0

>>> euclidean_distance((0,10), (1,1))
9.055385138137417
"""
x1 = ...
y1 = ...
x2 = ...
y2 = ...
return ...


Figure 19. Calculate Euclidean distance in Cartesian coordinate system

Hint
• $$distance(a, b) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2$$

### 7.1.3.3. Euclidean distance n dimensions

• Complexity level: easy

• Lines of code to write: 10 lines

• Estimated time of completion: 15 min

English
1. Given are two points A: Sequence[int] and B: Sequence[int]

2. Coordinates are in cartesian system

3. Points A and B are in N-dimensional space

4. Points A and B must be in the same space

5. Calculate distance between points using Euclidean algorithm

6. Function must pass doctest

Polish
1. Dane są dwa punkty A: Sequence[int] i B: Sequence[int]

2. Koordynaty są w systemie kartezjańskim

3. Punkty A i B są w N-wymiarowej przestrzeni

4. Punkty A i B muszą być w tej samej przestrzeni

5. Oblicz odległość między nimi wykorzystując algorytm Euklidesa

6. Funkcja musi przechodzić doctest

Input
def euclidean_distance(A, B):
"""
>>> A = (0,1,0,1)
>>> B = (1,1,0,0)
>>> euclidean_distance(A, B)
1.4142135623730951

>>> euclidean_distance((0,0,0), (0,0,0))
0.0

>>> euclidean_distance((0,0,0), (1,1,1))
1.7320508075688772

>>> euclidean_distance((0,1,0,1), (1,1,0,0))
1.4142135623730951

>>> euclidean_distance((0,0,1,0,1), (1,1,0,0,1))
1.7320508075688772

>>> euclidean_distance((0,0,1,0,1), (1,1))
Traceback (most recent call last):
...
ValueError: Points must be in the same dimensions
"""
return ...

Hint
• $$distance(a, b) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2 + ... + (n_2 - n_1)^2}$$

• for n1, n2 in zip(A, B)

### 7.1.3.4. Matrix multiplication

English
1. Multiply matrices using nested for loops

2. Function must pass doctest

Polish
1. Pomnóż macierze wykorzystując zagnieżdżone pętle for

2. Funkcja musi przechodzić doctest

Input
def matrix_multiplication(A, B):
"""
>>> A = [[1, 0], [0, 1]]
>>> B = [[4, 1], [2, 2]]
>>> matrix_multiplication(A, B)
[[4, 1], [2, 2]]

>>> A = [[1,0,1,0], [0,1,1,0], [3,2,1,0], [4,1,2,0]]
>>> B = [[4,1], [2,2], [5,1], [2,3]]
>>> matrix_multiplication(A, B)
[[9, 2], [7, 3], [21, 8], [28, 8]]
"""
return

Hints
• Zero matrix

• Three nested for loops

### 7.1.3.5. Triangle

English
1. Calculate triangle area

2. User will input base and height

3. Input numbers will be only int and float

4. Function must pass doctest

Polish
1. Obliczy pole trójkąta

2. Użytkownik poda wysokość i długość podstawy

3. Wprowadzone dane będą tylko int lub float

4. Funkcja musi przechodzić doctest`