Skip to content
Snippets Groups Projects
Commit b2b82a49 authored by tuhe's avatar tuhe
Browse files

unitgrade private

parent 9e100df5
No related branches found
No related tags found
No related merge requests found
Showing
with 508 additions and 22 deletions
# This file contains your results. Do not edit its content. Simply upload it as it is.
---------------------------------------------------------------------- ..ooO0Ooo.. ----------------------------------------------------------------------
b2757d5beb37e37a4d0db4a09e1450d292fef837d505a34d427678f285aa165da62f0312730427554c991cae67fc1d6695f9087e7924f590e170071da2ed5797 31560
---------------------------------------------------------------------- ..ooO0Ooo.. ----------------------------------------------------------------------
.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.
\ No newline at end of file
from stones_tests import StoneReport
from unitgrade_private.hidden_create_files import setup_grade_file_report
from snipper import snip_dir
if __name__ == "__main__":
setup_grade_file_report(StoneReport, minify=False, obfuscate=False, execute=False, with_coverage=True)
# Deploy the files using snipper: https://gitlab.compute.dtu.dk/tuhe/snipper
snip_dir(source_dir="", dest_dir="../../students/week2", exclude=['*.token', 'deploy.py'])
def maximum_stones(W, stone_weights):
stone_weights.sort()
T = 0
s = 0
for k, we in enumerate(stone_weights):
T += we
if T <= W:
s = s + 1
else:
break
return s
if __name__ == "__main__":
print("The following call using maximum weight of W=15 should return 5.")
print(maximum_stones(15, [2, 5, 3, 1, 8, 4, 5, 7]))
from unitgrade.framework import Report, UTestCase
from unitgrade.evaluate import evaluate_report_student
import stones
from stones import maximum_stones
# A fancy helper function to generate nicer-looking titles.
def trlist(x):
s = str(list(x))
if len(s) > 30:
s = s[:30] + "...]"
return s
class Stones(UTestCase):
""" Test of the Stones function """
def stest(self, W, stone_weights): # Helper function.
N = maximum_stones(W, stone_weights)
self.title = f"stones({W}, {trlist(stone_weights)}) = {N} ?"
self.assertEqualC(N)
def test_basecase(self):
""" Test the stones-example given in the homework """
N = maximum_stones(15, [2, 5, 3, 1, 8, 4, 5, 7])
self.assertEqual(N, 5) # Test that we can collect 5 stones.
def test_stones1(self):
self.stest(4, [4]) # One stone weighing 4 kg.
def test_stones2(self):
self.stest(4, [1, 4]) # should also give 1
def test_stones3(self):
self.stest(4, [4, 1]) # should also give 1
def test_stones4(self):
self.stest(13, [2, 5, 3, 1, 8, 4, 5, 7])
class StoneReport(Report):
title = "02105 week 2: Stone collection"
questions = [(Stones, 10),]
pack_imports = [stones]
if __name__ == "__main__":
evaluate_report_student(StoneReport())
This diff is collapsed.
File added
def maximum_stones(W, stone_weights):
stone_weights.sort()
T = 0
s = 0
for k, we in enumerate(stone_weights):
T += we
if T <= W:
s = s + 1
else:
break
return s
if __name__ == "__main__":
print("The following call using maximum weight of W=15 should return 5.")
print(maximum_stones(15, [2, 5, 3, 1, 8, 4, 5, 7]))
from unitgrade.framework import Report, UTestCase
from unitgrade.evaluate import evaluate_report_student
import stones
from stones import maximum_stones
# A fancy helper function to generate nicer-looking titles.
def trlist(x):
s = str(list(x))
if len(s) > 30:
s = s[:30] + "...]"
return s
class Stones(UTestCase):
""" Test of the Stones function """
def stest(self, W, stone_weights): # Helper function.
N = maximum_stones(W, stone_weights)
self.title = f"stones({W}, {trlist(stone_weights)}) = {N} ?"
self.assertEqualC(N)
def test_basecase(self):
""" Test the stones-example given in the homework """
N = maximum_stones(15, [2, 5, 3, 1, 8, 4, 5, 7])
self.assertEqual(N, 5) # Test that we can collect 5 stones.
def test_stones1(self):
self.stest(4, [4]) # One stone weighing 4 kg.
def test_stones2(self):
self.stest(4, [1, 4]) # should also give 1
def test_stones3(self):
self.stest(4, [4, 1]) # should also give 1
def test_stones4(self):
self.stest(13, [2, 5, 3, 1, 8, 4, 5, 7])
class StoneReport(Report):
title = "02105 week 2: Stone collection"
questions = [(Stones, 10),]
pack_imports = [stones]
if __name__ == "__main__":
evaluate_report_student(StoneReport())
File added
No preview for this file type
No preview for this file type
......@@ -5,13 +5,7 @@ def bacteriaGrowth(n0, alpha, K, N): #!f
"""
Calculate time until bacteria growth exceed N starting from a population of n0 bacteria.
hints:
* consider n0
* alpha > 0
:param n0:
:param alpha:
:param K:
:param N:
:return:
* You need to update the number of bacteria n0 within a loop
"""
if n0 > N:
return 0
......@@ -19,7 +13,8 @@ def bacteriaGrowth(n0, alpha, K, N): #!f
n0 = (1 + alpha * (1-n0 / K) ) * n0
if n0 > N:
break
return t+1
t += 1
return t
def clusterAnalysis(reflectance):
reflectance = np.asarray(reflectance)
......@@ -33,15 +28,17 @@ def clusterAnalysis(reflectance):
return I1 + 1
def fermentationRate(measuredRate, lowerBound, upperBound):
# Insert your code here
return np.mean( [r for r in measuredRate if lowerBound < r < upperBound] )
"""
Compute and return the mean value of the rates in 'measuredRate'
which falls within lowerBound and upperBound.
"""
mean_value = np.mean( [r for r in measuredRate if lowerBound < r < upperBound] )
return mean_value
def removeIncomplete(id):
""" Hints:
* Take a look at the example in the exercise.
"""
Hints:
* Take a look at the example in the exercise.
"""
id = np.asarray(id)
id2 = []
......@@ -50,15 +47,10 @@ def removeIncomplete(id):
id2.append(v)
return np.asarray(id2)
if __name__ == "__main__":
# I = clusterAnalysis([1.7, 1.6, 1.3, 1.3, 2.8, 1.4, 2.8, 2.6, 1.6, 2.7])
# print(I)
print(fermentationRate(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 15, 25))
# print(removeIncomplete(np.array([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])))
# Problem 1: Write a function which add two numbers
# clusterAnalysis([2, 1, 2, 4, 5])
\ No newline at end of file
......@@ -130,7 +130,7 @@ class FermentationRate(UTestCase):
class Report1Flat(Report):
title = "Week 4: Looping"
title = "02531 week 5: Looping"
questions = [(ClusterAnalysis, 10), (RemoveIncomplete, 10), (Bacteria, 10), (FermentationRate, 10),]
pack_imports = [looping]
......
This diff is collapsed.
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
from unitgrade.framework import Report, UTestCase
from unitgrade import cache
from unitgrade.evaluate import evaluate_report_student
import numpy as np
import looping
from looping import bacteriaGrowth, clusterAnalysis, removeIncomplete, fermentationRate
from week6programs import thermoEquilibrium
def trlist(x):
s = str(list(x))
if len(s) > 30:
s = s[:30] + "...]"
return s
class Thermodynamics(UTestCase):
""" Thermodynamical equilibrium """
random_numbers1 = [0.16, 0.04, 0.72,
0.09, 0.17, 0.60, 0.26, 0.65, 0.69, 0.74, 0.45, 0.61,
0.23, 0.37, 0.15, 0.83, 0.61, 1.00, 0.08, 0.44]
random_numbers2 = [0.9, 0.1, 0.7, 0.3, 0.16, 0.04, 0.72,
0.09, 0.17, 0.60, 0.26, 0.65, 0.69, 0.74, 0.45, 0.61,
0.23, 0.37, 0.15, 0.83, 0.61, 1.00, 0.08, 0.44]
def test_basecase(self):
""" Example from problem sheet """
# Standard unittest:
t = thermoEquilibrium(2.0, np.array([0.16, 0.04, 0.72,
0.09, 0.17, 0.60, 0.26, 0.65, 0.69, 0.74, 0.45, 0.61,
0.23, 0.37, 0.15, 0.83, 0.61, 1.00, 0.08, 0.44]))
self.assertEqual(t, 1)
def test_1(self): # Using the cache system.
""" Alternative test case 1 """
self.assertEqualC(thermoEquilibrium(2, np.array(self.random_numbers1)))
def test_2(self):
""" Alternative test case 2 """
self.assertEqualC(thermoEquilibrium(10, np.array(self.random_numbers2)))
def test_3(self):
""" Alternative test case 3 """
self.assertEqualC(thermoEquilibrium(5, np.array(self.random_numbers1)))
class ClusterAnalysis(UTestCase):
""" Cluster analysis """
def stest(self, n, seed):
np.random.seed(seed)
x = np.round(np.random.rand(n), 1)
I = clusterAnalysis(x)
self.title = f"clusterAnalysis({list(x)}) = {list(I)} ?"
self.assertEqualC(list(I))
def test_cluster1(self):
""" Hints:
* Make sure to frobulate the frobulator.
* Just try harder
"""
self.stest(3, 10)
def test_cluster2(self):
self.stest(4, 146)
def test_cluster3(self):
self.stest(5, 12)
def test_cluster4(self):
"""
Cluster analysis for tied lists
Hints:
* It may be that an observations has the same distance to the two clusters. Where do you assign it in this case?
"""
x = np.array([10.0, 12.0, 10.0, 12.0, 9.0, 11.0, 11.0, 13.0])
self.assertEqualC(list(clusterAnalysis(x) ) )
class RemoveIncomplete(UTestCase):
""" Remove incomplete IDs """
def stest(self, x):
I = list( removeIncomplete(x) )
self.title = f"removeId({trlist(x)}) = {trlist(I)} ?"
self.assertEqualC(I)
@cache
def rseq(self, max, n):
np.random.seed(42)
return np.random.randint(max, size=(n,) ) + (np.random.randint(2, size=(n,) )+1)/10
def test_incomplete1(self):
self.stest( np.array([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1]) )
def test_incomplete2(self):
self.stest( np.array([1.1, 1.2, 1.3, 2.1, 2.2, 2.3]) )
def test_incomplete3(self):
self.stest(np.array([5.1, 5.2, 4.1, 4.3, 4.2, 8.1, 8.2, 8.3]) )
def test_incomplete4(self):
self.stest(np.array([1.1, 1.3, 2.1, 2.2, 3.1, 3.3, 4.1, 4.2, 4.3]) )
def test_incomplete5(self):
self.stest(self.rseq(10, 40))
class FermentationRate(UTestCase):
""" Fermentation rate """
def stest(self, x, lower, upper):
I = fermentationRate(x, lower, upper)
s = trlist(x)
self.title = f"fermentationRate({s}, {lower}, {upper}) = {I:.3f} ?"
self.assertEqualC(I)
@cache
def rseq(self, max, n):
np.random.seed(42)
return np.random.randint(max, size=(n,) ) + (np.random.randint(3, size=(n,) )+1)/n
def test_rate1(self):
self.stest(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 15, 25)
def test_rate2(self):
self.stest(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 1, 200)
def test_rate3(self):
self.stest(np.array([1.75]), 1, 2)
def test_rate4(self):
self.stest(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 18.2, 20)
class Report1Flat(Report):
title = "Week 6: Programs"
questions = [(ClusterAnalysis, 10), (RemoveIncomplete, 10), (Bacteria, 10), (FermentationRate, 10),]
pack_imports = [looping]
if __name__ == "__main__":
evaluate_report_student(Report1Flat())
import numpy as np
def thermoEquilibrium(N, r): # ok
Nl = N
for t, rand in enumerate(r):
Plr = Nl / N
Nl += (-1 if rand < Plr else 1)
if Nl == N//2:
break
t = t + 1 if N//2 == Nl else 0
return t
def circleAreaMC(xvals, yvals):
X = np.stack([np.asarray(xvals), np.asarray(yvals)], 1)
A = (np.sum(X ** 2, 1) < 1.0 ).sum() / len(xvals) * 4
return A
def convertTemperature(T, unitFrom, unitTo):
C, F, K = 'Celsius', 'Fahrenheit', 'Kelvin'
def x2K(temp, unit):
if unit == F: return (temp + 459.67) / 1.8
if unit == C: return temp + 273.15
return temp
def K2x(temp, unit):
if unit == C: return temp - 273.15
if unit == F: return 1.8 * temp - 459.67
return temp
T = K2x(x2K(T, unitFrom), unitTo)
return T
if __name__ == "__main__":
print("convertTemperature should return 10. Your output:")
print(convertTemperature(50.0, "Fahrenheit", "Celsius"))
print("circleAreaMC should return 3.2. Your output:")
print(circleAreaMC(np.array([-0.1, 0.7, 0.8, 0.5, -0.4]), np.array([0.3, -0.1, 0.9, 0.6, -0.3])))
print("thermoEquilibrium should return 1. Your output:")
print(thermoEquilibrium(2.0, np.array([0.16, 0.04, 0.72,
0.09, 0.17, 0.60, 0.26, 0.65, 0.69, 0.74, 0.45, 0.61,
0.23, 0.37, 0.15, 0.83, 0.61, 1.00, 0.08, 0.44])))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment