import numpy as np


def create_k_steps_PI(k_span, steps, PI_factor):
    """
    A function that returns a k_span gradient span with odd and even gradient steps
    """
    steps_PI = int(np.ceil(steps/PI_factor))
    k_steps = np.array(range(steps_PI + 1))
    if steps == 1:
        k_steps = np.array([0])
    else:
        k_steps = (k_steps*PI_factor +  steps%PI_factor - np.ceil(steps/2))/ np.floor(steps/ 2)
        k_steps = [k_steps[i] for i in range(len(k_steps)) if  abs(k_steps[i]) <= 1]
        
        k_steps = np.flip(k_steps, 0)
        if len(k_steps)>steps_PI:
            k_steps = np.delete(k_steps, -1)
        
    return k_steps * k_span * 0.5

def create_k_steps(k_span, steps):
    """
    A function that returns a k_span gradient span with odd and even gradient steps
    """
    k_steps = np.array(range(steps + 1))

    if (np.mod(steps, 2) == 0):
        k_steps = (k_steps - steps / 2) / (steps / 2)
    else:
        k_steps = (k_steps - (steps + 1) / 2) / (steps / 2)

    k_steps = np.flip(k_steps, 0)
    k_steps = np.delete(k_steps, -1)
    return k_steps * k_span * 0.5     


 