Skip to content

Utils

construct_interval(var, *, dim=None, depth=0)

Construct intervals from var for dim dimensions.

Parameters:

Name Type Description Default
var Object

Element from which a 1d interval is created

required
dim int

Dimension of the requested interval, by default None

None
depth int

Used for dim==3 by default 0

0

Returns:

Type Description
list

dim dimensional interval.

Source code in phaseportrait/utils/utils.py
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
def construct_interval(var, *, dim=None, depth=0):
    """Construct intervals from `var` for `dim` dimensions.

    Args:
        var (Object):  Element from which a 1d interval is created
        dim (int, optional): Dimension of the requested interval, by default None
        depth (int, optional): Used for `dim==3` by default 0

    Returns:
        (list): `dim` dimensional interval.
    """
    if not dim:
        dim = len(var) 

    if dim==1:
        inter = construct_interval_1d(var)
    elif dim==2:
        inter = construct_interval_2d(var)
    elif dim==3:
        inter = construct_interval_3d(var, depth=depth)
    while len(inter)<dim:
        inter.append(inter[-1])
    return inter

construct_interval_1d(var)

Creates an 1d interval from a variable

Parameters:

Name Type Description Default
var float, list

Element from which a 1d interval is created It supports: * number * [number, number]

required

Returns:

Type Description
list

1d interval []

Raises:

Type Description
exceptions.RangoInvalid

If the parameter given is not a number nor a list or tuple.

Source code in phaseportrait/utils/utils.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def construct_interval_1d(var):
    """Creates an 1d interval from a variable

    Args:
        var (float, list):
            Element from which a 1d interval is created
            It supports:
            * number
            * [number, number]

    Returns:
        (list): 1d interval []


    Raises:
        (exceptions.RangoInvalid): If the parameter given is not a number nor a list or tuple.
    """
    try:
        if is_number(var):
            if var !=0:
                return sorted([-var, var])
            raise Exception('0 is not a valid range.')
        if is_range(var):
             return var
    except Exception as e:
        raise exceptions.InvalidRange(f"{var} as 1D range gave the following error: "+str(e))

construct_interval_2d(var)

Creates an 2d interval from a variable

Parameters:

Name Type Description Default
var float, list

Element from which a 1d interval is created It supports: * number * [number, number] * [[number, number], number] * [[number, number],[number, number]]

And all the permutations.

required

Returns:

Type Description
list[list]

2d interval [[],[]]

Raises:

Type Description
phaseportrait.exceptions.exceptions.RangoInvalid

If the parameter given is not a number nor a list or tuple.

Source code in phaseportrait/utils/utils.py
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
def construct_interval_2d(var):
    """Creates an 2d interval from a variable

    Args:
        var (float, list):
            Element from which a 1d interval is created
            It supports:
            * number
            * [number, number]
            * [[number, number], number]
            * [[number, number],[number, number]]

            And all the permutations.

    Returns:
        (list[list]): 2d interval [[],[]]

    Raises:
        (phaseportrait.exceptions.exceptions.RangoInvalid): If the parameter given is not a number nor a list or tuple.
    """
    try:
        [a,b],[c,d] = var
    except Exception:
        try:
            b,d = var
            if is_range(b) or is_range(d):
                [a,b],[c,d] = construct_interval_1d(b), construct_interval_1d(d)
            else:
                a = c = b
                b = d
        except Exception:
            try:
                a = var
                if a !=0:
                    b = d = a
                    a = c = 0
                else:
                    raise Exception
            except Exception as e:    
                raise exceptions.InvalidRange(f"{var} is not a valid 2D range.")
    a1 = [a,b]
    a2 = [c,d]
    a1.sort()
    a2.sort()
    return [a1, a2]

construct_interval_3d(var, *, depth=0)

Creates an 3d interval from a variable

Parameters:

Name Type Description Default
var float, list

Element from which a 1d interval is created It supports: * number * [number, number, number] * [[number, number], number, number] * [[number, number], [number, number], number] * [[number, number],[number, number], [number, number]]

And all the permutations.

required

Returns:

Type Description
list

3d interval: [[],[],[]]

Raises:

Type Description
exceptions.RangoInvalid

If the parameter given is not a number nor a list or tuple.

Source code in phaseportrait/utils/utils.py
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
def construct_interval_3d(var, *, depth=0):
    """Creates an 3d interval from a variable

    Args:
        var (float, list):
            Element from which a 1d interval is created
            It supports:
            * number
            * [number, number, number]
            * [[number, number], number, number]
            * [[number, number], [number, number], number]
            * [[number, number],[number, number], [number, number]]

            And all the permutations.

    Returns:
        (list): 3d interval: [[],[],[]]

    Raises:
        (exceptions.RangoInvalid): If the parameter given is not a number nor a list or tuple.
    """
    try:
        if is_number(var):
            if depth == 0:
                return [sorted([0, var])]*3
            elif depth == 1:
                return sorted([-var, var])
        elif is_range(var):
            if depth==0:
                return [construct_interval_3d(i, depth=depth+1) for i in var]
            if depth==1:
                return var
    except Exception as e:
        raise exceptions.InvalidRange(f"{var} as 3D range gave the following error: "+str(e))

is_number(x)

Checks if x is a number

Parameters:

Name Type Description Default
x Object)

The object.

required

Returns:

Type Description
bool

Whether is a number or not.

Source code in phaseportrait/utils/utils.py
 3
 4
 5
 6
 7
 8
 9
10
11
12
def is_number(x):
    """Checks if `x` is a number

    Args:
        x (Object) :  The object.

    Returns:
        (bool): Whether is a number or not.
    """
    return isinstance(x, (float,int))

is_range(U)

Checks if x is a list or a tuple

Parameters:

Name Type Description Default
U Object

The object.

required

Returns:

Type Description
bool

Whether is a collection of elements or not.

Source code in phaseportrait/utils/utils.py
14
15
16
17
18
19
20
21
22
23
def is_range(U):
    """Checks if `x` is a list or a tuple

    Args:
        U (Object): The object.

    Returns:
        (bool): Whether is a collection of elements or not.
    """
    return isinstance(U, (list,tuple))