import numpy as np

def print_array():
    arr = np.array([[-1,2,-3],[4,5,6],[7,8,9]])
    print(f"Tablica\n {arr}")
    print(f"pierwszy element tablicy: {arr[0]}")
    print(f"pierwszy element zagniezdzony: {arr[0][0]}")
    print(f"typ obiektu tablicy {type(arr)}")
    print(f"ksztalt tablicy: {arr.shape}")
    return arr

arr = print_array()

def shapeshifter(arr):
    print("ksztalt tablicy 9x1")
    print(arr.reshape(9,1))
    print("ksztalt tablicy 1x9")
    print(arr.reshape(1,9))
    print("ksztalt tablicy 3x3")
    print(arr.reshape(3,3))
    print("ksztalt tablicy ?x9")
    print(arr.reshape(-1,9))
    print("ksztalt tablicy 3x?")
    print(arr.reshape(3,-1))
    print("podial liczby na 3")
    newarr = np.array_split(arr.reshape(-1,9), 3)
    print(newarr)

shapeshifter(arr)

def data_format():
    try:
        arr = np.array([[1.1,2.2,3.3], ["kot",12,"ola z opola☝️🤓"], ["a","h","5"]], dtype="U")
        print(arr)
        print(type(arr))
    except Exception as e:
        print(e)

    arr = np.array([[1.1,2.2,3.3], [1.1,2.2,3.3], [1.1,2.2,3.3]], dtype="U")
    print(arr)

    arr = np.array([[1.1,2.2,3.3], [1.1,2.2,3.3], [1.1,2.2,3.3]], dtype="i")
    print(arr)

    arr = np.array([[1.1,2.2,3.3], [1.1,2.2,3.3], [1.1,2.2,3.3]], dtype="f")
    print(arr)

print("******************************************************************************")
data_format()

def sorted_array():
    arr = np.array([[5,2,9],[8,1,4],[3,7,6]])
    print(f'tablica przed sortowaniem\n {arr}')
    print(f'tablica po sortowaniem\n {np.sort(arr)}')
sorted_array()

from numpy import random
def generate_random_numbers():
    for _ in  range(10):
        print(random.randint(100))
    for _ in  range(10):
        print(random.rand())

generate_random_numbers()

def pick_random_numbers():
    print(random.rand(3,5))
    print(random.choice([3,5,7,9]))
    print(random.choice([3,5,7,9], size=(3,5)))
    x = random.choice([3,5,7,9], p=[0.1,0.3,0.6,0.0], size=100)
    print(x)

print((-2)**(np.sqrt(2)))
pick_random_numbers()

def mathematical_functions():
    print(f"liczba pi: {np.pi}")
    print(f"liczba eulera: {np.e}")
    print(f"sin pi/2: {np.sin(0.5*np.pi)}")
    print(f"pi/2 to: {np.degrees(0.5*np.pi)} stopni a 360 stopni to {np.radians(360)}")
mathematical_functions()