Coverage for docs/source/examples/breakdowns.py: 24%

49 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-07 22:13 -0500

1"An example to show off Breakdowns" 

2import os 

3import sys 

4import pickle 

5import pint 

6from packaging import version 

7from gpkit.breakdowns import Breakdowns 

8 

9dirpath = os.path.dirname(os.path.realpath(__file__)) + os.sep 

10if version.parse(pint.__version__) >= version.parse("0.13"): 

11 filename = "solar_13.p" 

12elif version.parse(pint.__version__) >= version.parse("0.12"): 

13 filename = "solar_12.p" 

14elif version.parse(pint.__version__) >= version.parse("0.10"): 

15 filename = "solar_10.p" 

16elif version.parse(pint.__version__) == version.parse("0.9"): 

17 filename = "solar.p" 

18else: 

19 filename = "" 

20 

21if filename: 

22 with open(dirpath + filename, "rb") as f: 

23 sol = pickle.load(f) 

24else: 

25 sol = None 

26 

27# our Miniconda windows test platform can't print unicode 

28if sys.platform[:3] != "win" and sol is not None: 

29 # the code to create solar.p is in ./breakdowns/solartest.py 

30 bds = Breakdowns(sol) 

31 

32 print("Cost breakdown (as seen in solution tables)") 

33 print("==============") 

34 bds.plot("cost") 

35 

36 print("Variable breakdowns (note the two methods of access)") 

37 print("===================") 

38 varkey, = sol["variables"].keymap[("Mission.FlightSegment.AircraftPerf" 

39 ".AircraftDrag.Poper")] 

40 bds.plot(varkey) 

41 bds.plot("AircraftPerf.AircraftDrag.MotorPerf.Q") 

42 

43 print("Combining the two above by increasing maxwidth") 

44 print("----------------------------------------------") 

45 bds.plot("AircraftPerf.AircraftDrag.Poper", maxwidth=105) 

46 

47 print("Model sensitivity breakdowns (note the two methods of access)") 

48 print("============================") 

49 bds.plot("model sensitivities") 

50 bds.plot("Aircraft") 

51 

52 print("Exhaustive variable breakdown traces (and configuration arguments)") 

53 print("====================================") 

54 # often useful as a reference point when reading traces 

55 bds.plot("AircraftPerf.AircraftDrag.Poper", height=12) 

56 # includes factors, can be useful for reading traces as well 

57 bds.plot("AircraftPerf.AircraftDrag.Poper", showlegend=True) 

58 print("\nPermissivity = 2 (the default)") 

59 print("----------------") 

60 bds.trace("AircraftPerf.AircraftDrag.Poper") 

61 print("\nPermissivity = 1 (stops at Pelec = v·i)") 

62 print("----------------") 

63 bds.trace("AircraftPerf.AircraftDrag.Poper", permissivity=1) 

64 

65 # you can also produce Plotly treemaps/icicle plots of your breakdowns 

66 fig = bds.treemap("model sensitivities", returnfig=True) 

67 fig = bds.icicle("cost", returnfig=True) 

68 # uncommenting any of the below makes and shows the plot directly 

69 # bds.icicle("model sensitivities") 

70 # bds.treemap("cost")