Skip to content

Commit f1460d6

Browse files
committed
fixed test_alpha
1 parent 6b5793c commit f1460d6

File tree

5 files changed

+37
-26
lines changed

5 files changed

+37
-26
lines changed

.cache/v/cache/lastfailed

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
{
2-
"test_fuzzy_units.py::test_alpha": true
3-
}
1+
{}

Showcase.ipynb

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,29 @@
1414
},
1515
{
1616
"cell_type": "code",
17-
"execution_count": null,
17+
"execution_count": 9,
1818
"metadata": {
19-
"collapsed": true
19+
"collapsed": false
2020
},
21-
"outputs": [],
21+
"outputs": [
22+
{
23+
"data": {
24+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEI1JREFUeJzt3X2MZXddx/H3h11WEihY3BGhu2ULWdTlQVonBQSBSIFt\nlS2KIdtIbAXZEFkEwYclkFLqHwYImGjWh4oNSIBtQcFFlywIGKKhdafQFnZL22EFu0tph8dqiJaF\nr3/cs+Q6nYczM3fmTn++X8nNnIfvnfPNb879zJlz7p2TqkKS1JYHjLsBSdLoGe6S1CDDXZIaZLhL\nUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBm0c14Y3b95c27ZtG9fmJel+6YYbbvh6VU0sVje2cN+2\nbRtTU1Pj2rwk3S8l+UqfOk/LSFKDDHdJapDhLkkNMtwlqUGGuyQ1qFe4J9mZ5NYk00n2zbH+7CSf\nSvK5JDcnuWj0rUqS+lo03JNsAPYDFwI7gEuS7JhV9kbg2qo6F9gN/NmoG5Uk9dfnfe7nA9NVdRwg\nyQHgYuDYUE0BD+2mHwZ8dZRNSqe9+SNHOfbVe8bdxtjteNRDedMLHj/uNrSO9TktcxZwx9D8iW7Z\nsCuAlyQ5ARwCXjXXN0qyJ8lUkqmZmZlltCtJ6mNUn1C9BHhXVb09ydOA9yR5QlX9YLioqq4CrgKY\nnJz0ztxaMo9WpX76HLmfBLYOzW/plg17GXAtQFV9BngQsHkUDUqSlq5PuB8Btic5J8kmBhdMD86q\n+Q/gOQBJfppBuHveRZLGZNFwr6pTwF7gMHALg3fFHE1yZZJdXdnrgJcnuQl4P3BZVXnaRZLGpNc5\n96o6xOBC6fCyy4emjwFPH21rkqTl8hOqktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCX\npAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lq\nkOEuSQ0y3CWpQYa7JDXIcJekBvUK9yQ7k9yaZDrJvjnW/3GSG7vHbUm+PfpWJUl9bVysIMkGYD/w\nXOAEcCTJwao6drqmqn5nqP5VwLmr0Kskqac+R+7nA9NVdbyq7gUOABcvUH8J8P5RNCdJWp4+4X4W\ncMfQ/Ilu2X0keTRwDvDJedbvSTKVZGpmZmapvUqSehr1BdXdwAer6vtzrayqq6pqsqomJyYmRrxp\nSdJpfcL9JLB1aH5Lt2wuu/GUjCSNXZ9wPwJsT3JOkk0MAvzg7KIkPwWcCXxmtC1KkpZq0XCvqlPA\nXuAwcAtwbVUdTXJlkl1DpbuBA1VVq9OqJKmvRd8KCVBVh4BDs5ZdPmv+itG1JUlaCT+hKkkNMtwl\nqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIa\nZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDeoV7kp1Jbk0ynWTfPDUv\nTnIsydEk7xttm5Kkpdi4WEGSDcB+4LnACeBIkoNVdWyoZjvweuDpVfWtJD++Wg1LkhbX58j9fGC6\nqo5X1b3AAeDiWTUvB/ZX1bcAquru0bYpSVqKPuF+FnDH0PyJbtmwxwGPS/KvSa5LsnNUDUqSlm7R\n0zJL+D7bgWcDW4BPJ3liVX17uCjJHmAPwNlnnz2iTUuSZutz5H4S2Do0v6VbNuwEcLCqvldV/w7c\nxiDs/4+quqqqJqtqcmJiYrk9S5IW0SfcjwDbk5yTZBOwGzg4q+bDDI7aSbKZwWma4yPsU5K0BIuG\ne1WdAvYCh4FbgGur6miSK5Ps6soOA99Icgz4FPB7VfWN1WpakrSwVNVYNjw5OVlTU1Nj2bYk3V8l\nuaGqJher8xOqktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtS\ngwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXI\ncJekBvUK9yQ7k9yaZDrJvjnWX5ZkJsmN3eM3R9+qJKmvjYsVJNkA7AeeC5wAjiQ5WFXHZpVeU1V7\nV6FHSdIS9TlyPx+YrqrjVXUvcAC4eHXbkiStRJ9wPwu4Y2j+RLdsthcluTnJB5NsHUl3kqRlGdUF\n1Y8A26rqScDHgXfPVZRkT5KpJFMzMzMj2rQkabY+4X4SGD4S39It+6Gq+kZV/U83+07gZ+f6RlV1\nVVVNVtXkxMTEcvqVJPXQJ9yPANuTnJNkE7AbODhckOSRQ7O7gFtG16IkaakWfbdMVZ1Kshc4DGwA\nrq6qo0muBKaq6iDw20l2AaeAbwKXrWLPkqRFpKrGsuHJycmampoay7Yl6f4qyQ1VNblYnZ9QlaQG\nGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDh\nLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNahXuCfZmeTW\nJNNJ9i1Q96IklWRydC1KkpZq0XBPsgHYD1wI7AAuSbJjjrozgFcD14+6SUnS0vQ5cj8fmK6q41V1\nL3AAuHiOuj8E3gL89wj7kyQtQ59wPwu4Y2j+RLfsh5KcB2ytqn8cYW+SpGVa8QXVJA8A3gG8rkft\nniRTSaZmZmZWumlJ0jz6hPtJYOvQ/JZu2WlnAE8A/jnJl4GnAgfnuqhaVVdV1WRVTU5MTCy/a0nS\ngvqE+xFge5JzkmwCdgMHT6+squ9U1eaq2lZV24DrgF1VNbUqHUuSFrVouFfVKWAvcBi4Bbi2qo4m\nuTLJrtVuUJK0dBv7FFXVIeDQrGWXz1P77JW3JUlaCT+hKkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNd\nkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWp\nQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJalCvcE+yM8mtSaaT7Jtj/SuSfD7JjUn+JcmO0bcq\nSepr0XBPsgHYD1wI7AAumSO831dVT6yqJwNvBd4x8k4lSb31OXI/H5iuquNVdS9wALh4uKCq7hma\nfTBQo2tRkrRUG3vUnAXcMTR/AnjK7KIkrwReC2wCfmEk3UmSlmVkF1Sran9VPRb4A+CNc9Uk2ZNk\nKsnUzMzMqDYtSZqlT7ifBLYOzW/pls3nAPDCuVZU1VVVNVlVkxMTE/27lCQtSZ9wPwJsT3JOkk3A\nbuDgcEGS7UOzvwjcProWJUlLteg596o6lWQvcBjYAFxdVUeTXAlMVdVBYG+SC4DvAd8CLl3NpiVJ\nC+tzQZWqOgQcmrXs8qHpV4+4L0nSCvgJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4\nS1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrsk\nNchwl6QGGe6S1CDDXZIaZLhLUoN6hXuSnUluTTKdZN8c61+b5FiSm5N8IsmjR9+qJKmvRcM9yQZg\nP3AhsAO4JMmOWWWfAyar6knAB4G3jrpRSVJ/fY7czwemq+p4Vd0LHAAuHi6oqk9V1Xe72euALaNt\nU5K0FBt71JwF3DE0fwJ4ygL1LwM+upKmFvLmjxzl2FfvWa1v38uORz2UN73g8WPtQdJ4jCKD1iJD\n+oR7b0leAkwCz5pn/R5gD8DZZ589yk1LkoakqhYuSJ4GXFFVz+/mXw9QVX80q+4C4E+BZ1XV3Ytt\neHJysqamppbbtyT9v5TkhqqaXKyuzzn3I8D2JOck2QTsBg7O2ti5wF8Cu/oEuyRpdS0a7lV1CtgL\nHAZuAa6tqqNJrkyyqyt7G/AQ4ANJbkxycJ5vJ0laA73OuVfVIeDQrGWXD01fMOK+JEkr4CdUJalB\nhrskNchwl6QGGe6S1CDDXZIatOiHmFZtw8kM8JVlPn0z8PURtjNq9rcy9rdy671H+1u+R1fVxGJF\nYwv3lUgy1ecTWuNifytjfyu33nu0v9XnaRlJapDhLkkNur+G+1XjbmAR9rcy9rdy671H+1tl98tz\n7pKkhd1fj9wlSQtY1+He48bcP5Lkmm799Um2rWFvW5N8qrsx+NEkr56j5tlJvtP9p8wbk1w+1/da\nxR6/nOTz3bbv88/zM/An3fjdnOS8NeztJ4fG5cYk9yR5zayaNR+/JFcnuTvJF4aWPTzJx5Pc3n09\nc57nXtrV3J7k0jXq7W1Jvtj9/D6U5Efnee6C+8Iq93hFkpNDP8eL5nnugq/3VezvmqHevpzkxnme\nuyZjODJVtS4fwAbgS8BjgE3ATcCOWTW/BfxFN70buGYN+3skcF43fQZw2xz9PRv4hzGO4ZeBzQus\nv4jBLREDPBW4fow/668xeP/uWMcPeCZwHvCFoWVvBfZ10/uAt8zxvIcDx7uvZ3bTZ65Bb88DNnbT\nb5mrtz77wir3eAXwuz32gQVf76vV36z1bwcuH+cYjuqxno/cF70xdzf/7m76g8BzkmQtmquqO6vq\ns930fzL4X/dnrcW2R+hi4G9q4DrgR5M8cgx9PAf4UlUt90NtI1NVnwa+OWvx8H72buCFczz1+cDH\nq+qbVfUt4OPAztXurao+VoN7LsA6uDn9POPXR5/X+4ot1F+XHS8G3j/q7Y7Deg73uW7MPTs8f1jT\n7eDfAX5sTbob0p0OOhe4fo7VT0tyU5KPJlnru2oX8LEkN3T3r52tzxivhd3M/4Ia5/id9oiqurOb\n/hrwiDlq1sNYvpT5b06/2L6w2vZ2p46unue01noYv58H7qqq2+dZP+4xXJL1HO73C0keAvwt8Jqq\nmn1L9M8yONXwMwzuL/vhNW7vGVV1HnAh8Mokz1zj7S+qu3XjLuADc6we9/jdRw3+Pl93bzFL8gbg\nFPDeeUrGuS/8OfBY4MnAnQxOfaxHl7DwUfu6fz0NW8/hfhLYOjS/pVs2Z02SjcDDgG+sSXeDbT6Q\nQbC/t6r+bvb6qrqnqv6rmz4EPDDJ5rXqr6pOdl/vBj7E4E/fYX3GeLVdCHy2qu6avWLc4zfkrtOn\nq7qvc90neGxjmeQy4JeAX+t++dxHj31h1VTVXVX1/ar6AfBX82x7rPtilx+/AlwzX804x3A51nO4\nL3pj7m7+9LsSfhX45Hw796h15+f+Grilqt4xT81PnL4GkOR8BuO9Jr98kjw4yRmnpxlcePvCrLKD\nwK9375p5KvCdodMPa2Xeo6Vxjt8sw/vZpcDfz1FzGHhekjO70w7P65atqiQ7gd9ncHP6785T02df\nWM0eh6/j/PI82+7zel9NFwBfrKoTc60c9xguy7iv6C70YPBujtsYXEV/Q7fsSgY7MsCDGPw5Pw38\nG/CYNeztGQz+PL8ZuLF7XAS8AnhFV7MXOMrgyv91wM+tYX+P6bZ7U9fD6fEb7i/A/m58Pw9MrvHP\n98EMwvphQ8vGOn4MftHcCXyPwXnflzG4jvMJ4Hbgn4CHd7WTwDuHnvvSbl+cBn5jjXqbZnCu+vQ+\nePrdY48CDi20L6zh+L2n279uZhDYj5zdYzd/n9f7WvTXLX/X6f1uqHYsYziqh59QlaQGrefTMpKk\nZTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lq0P8CLk5Z2mr9bx8AAAAASUVORK5CYII=\n",
25+
"text/plain": [
26+
"<matplotlib.figure.Figure at 0x7fef6b03a9b0>"
27+
]
28+
},
29+
"metadata": {},
30+
"output_type": "display_data"
31+
}
32+
],
2233
"source": [
23-
"from fuzzy.classes import Domain\n",
24-
"from fuzzy.functions import alpha\n",
25-
"\n"
34+
"from fuzzy.classes import Domain, Set\n",
35+
"from fuzzy.functions import alpha, triangular\n",
36+
"\n",
37+
"numbers = Domain(\"numbers\", low=0, high=20)\n",
38+
"close_to_10 = Set(numbers, alpha(triangular(0, 20), 0.2,0.8))\n",
39+
"close_to_10.plot()"
2640
]
2741
},
2842
{

TODO-fuzzy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ do: build a testcase suite
22
---
33
do: review functions
44
---
5+
do: Set.plot should always plot between 0 and 1

fuzzy/functions.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def f(x):
6666
return f
6767

6868

69-
def alpha(func=None, floor=0, ceiling=1):
69+
def alpha(floor=0, ceiling=1, func=None):
7070
"""Function to clip functions or values.
7171
This is used to either cut off the upper or lower part of a graph.
7272
@@ -77,24 +77,24 @@ def alpha(func=None, floor=0, ceiling=1):
7777
>>> g(2)
7878
0.8
7979
"""
80-
if not (0 <= ceiling <= 1):
81-
raise ValueError('ceiling invalid.')
82-
if not (0 <= floor <= 1):
83-
raise ValueError('floor invalid.')
84-
if ceiling < floor:
85-
raise ValueError('ceiling must not be less than floor.')
86-
80+
if floor >= ceiling:
81+
raise UserWarning("floor must be lower than ceiling")
82+
8783
def f_func(x):
8884
if func(x) >= ceiling:
8985
return ceiling
90-
if func(x) <= floor:
86+
elif func(x) <= floor:
9187
return floor
88+
else:
89+
return x
9290

9391
def f_value(x):
9492
if x >= ceiling:
9593
return ceiling
96-
if x <= floor:
94+
elif x <= floor:
9795
return floor
96+
else:
97+
return x
9898

9999
return f_value if func is None else f_func
100100

test_fuzzy_units.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
from hypothesis import given, strategies as st
2+
from hypothesis import given, strategies as st, assume
33

44
from fuzzy import functions as fun
55

@@ -18,8 +18,6 @@ def test_invert(x):
1818
f = fun.inv(n)
1919
assert f(x) == 1 - x
2020

21-
22-
2321
@given(st.floats(allow_nan=False, allow_infinity=False),
2422
st.floats(allow_nan=False, allow_infinity=False))
2523
def test_constant(c, r):
@@ -31,12 +29,12 @@ def test_constant(c, r):
3129
st.floats(min_value=0, max_value=1),
3230
st.floats(allow_nan=False))
3331
def test_alpha(lower, upper, x):
34-
if lower >= upper:
35-
return
36-
f = fun.alpha(floor=lower, ceiling=upper)
32+
assume(lower < upper)
33+
34+
f = fun.alpha(lower, upper)
3735
if x <= lower:
3836
assert f(x) == lower
39-
if x >= upper:
37+
elif x >= upper:
4038
assert f(x) == upper
4139
else:
4240
assert f(x) == x

0 commit comments

Comments
 (0)