toji 1.6.8 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/example/calendar.ipynb +123 -0
  3. data/example/{schedule.yaml → calendar.yaml} +6 -30
  4. data/example/calendar_file.ipynb +338 -0
  5. data/example/example_core.rb +336 -0
  6. data/example/kake_recipe.rb +27 -0
  7. data/example/koji_making.ipynb +16 -15
  8. data/example/koji_making.rb +2 -1
  9. data/example/koji_making.yaml +9 -9
  10. data/example/koji_making_multi.ipynb +26 -25
  11. data/example/koji_recipe.rb +1 -1
  12. data/example/moromi.ipynb +25 -24
  13. data/example/moromi.rb +1 -0
  14. data/example/moromi.yaml +10 -4
  15. data/example/recipe.rb +75 -0
  16. data/example/shubo.ipynb +15 -14
  17. data/example/shubo.rb +2 -1
  18. data/example/shubo.yaml +10 -10
  19. data/lib/toji.rb +3 -1
  20. data/lib/toji/brew.rb +1 -2
  21. data/lib/toji/brew/base.rb +7 -71
  22. data/lib/toji/brew/builder.rb +47 -4
  23. data/lib/toji/brew/graph/bmd.rb +0 -1
  24. data/lib/toji/brew/graph/progress.rb +1 -1
  25. data/lib/toji/brew/koji.rb +0 -10
  26. data/lib/toji/brew/moromi.rb +2 -36
  27. data/lib/toji/brew/shubo.rb +0 -5
  28. data/lib/toji/brew/state.rb +58 -111
  29. data/lib/toji/brew/state_wrapper.rb +135 -0
  30. data/lib/toji/calendar.rb +123 -0
  31. data/lib/toji/{schedule → calendar}/date_column.rb +3 -6
  32. data/lib/toji/{schedule → calendar}/date_row.rb +6 -6
  33. data/lib/toji/ingredient.rb +10 -0
  34. data/lib/toji/ingredient/kake.rb +17 -0
  35. data/lib/toji/ingredient/kake/actual.rb +27 -0
  36. data/lib/toji/ingredient/kake/base.rb +18 -0
  37. data/lib/toji/ingredient/kake/expected.rb +41 -0
  38. data/lib/toji/ingredient/koji.rb +19 -0
  39. data/lib/toji/ingredient/koji/actual.rb +30 -0
  40. data/lib/toji/ingredient/koji/actual_fermentable.rb +15 -0
  41. data/lib/toji/ingredient/koji/base.rb +35 -0
  42. data/lib/toji/ingredient/koji/expected.rb +46 -0
  43. data/lib/toji/ingredient/koji/expected_fermentable.rb +15 -0
  44. data/lib/toji/{recipe → ingredient}/koji_rate.rb +1 -1
  45. data/lib/toji/ingredient/rice.rb +10 -0
  46. data/lib/toji/ingredient/rice/actual_steamable.rb +27 -0
  47. data/lib/toji/ingredient/rice/base.rb +41 -0
  48. data/lib/toji/ingredient/rice/expected_steamable.rb +29 -0
  49. data/lib/toji/ingredient/rice_rate.rb +35 -0
  50. data/lib/toji/product.rb +65 -0
  51. data/lib/toji/{schedule/product_event.rb → product/event.rb} +4 -4
  52. data/lib/toji/recipe.rb +120 -5
  53. data/lib/toji/recipe/step.rb +46 -59
  54. data/lib/toji/version.rb +1 -1
  55. metadata +32 -38
  56. data/example/rice_recipe.rb +0 -28
  57. data/example/schedule.ipynb +0 -393
  58. data/example/schedule_file.ipynb +0 -337
  59. data/example/three_step_mashing_recipe.rb +0 -67
  60. data/lib/toji/brew/state_accessor.rb +0 -13
  61. data/lib/toji/brew/state_record.rb +0 -72
  62. data/lib/toji/recipe/ingredient.rb +0 -10
  63. data/lib/toji/recipe/ingredient/koji.rb +0 -21
  64. data/lib/toji/recipe/ingredient/koji/actual.rb +0 -32
  65. data/lib/toji/recipe/ingredient/koji/actual_fermentable.rb +0 -17
  66. data/lib/toji/recipe/ingredient/koji/base.rb +0 -37
  67. data/lib/toji/recipe/ingredient/koji/expected.rb +0 -48
  68. data/lib/toji/recipe/ingredient/koji/expected_fermentable.rb +0 -17
  69. data/lib/toji/recipe/ingredient/rice.rb +0 -21
  70. data/lib/toji/recipe/ingredient/rice/actual.rb +0 -29
  71. data/lib/toji/recipe/ingredient/rice/actual_steamable.rb +0 -29
  72. data/lib/toji/recipe/ingredient/rice/base.rb +0 -51
  73. data/lib/toji/recipe/ingredient/rice/expected.rb +0 -43
  74. data/lib/toji/recipe/ingredient/rice/expected_steamable.rb +0 -31
  75. data/lib/toji/recipe/ingredient/yeast.rb +0 -21
  76. data/lib/toji/recipe/rice_rate.rb +0 -10
  77. data/lib/toji/recipe/rice_rate/base.rb +0 -21
  78. data/lib/toji/recipe/rice_rate/cooked.rb +0 -67
  79. data/lib/toji/recipe/rice_rate/steamed.rb +0 -30
  80. data/lib/toji/recipe/three_step_mashing.rb +0 -274
  81. data/lib/toji/recipe/yeast_rate.rb +0 -41
  82. data/lib/toji/schedule.rb +0 -11
  83. data/lib/toji/schedule/calendar.rb +0 -139
  84. data/lib/toji/schedule/date_interval_enumerator.rb +0 -45
  85. data/lib/toji/schedule/product.rb +0 -117
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cb7b9d1041efe57106054ed9e49f2d521550ab9f81a3de9be8433ff7f672926
4
- data.tar.gz: 77297b7cba2845e1e470e37ddbb70db62cd71c8fc0afd5505e152249fe98d029
3
+ metadata.gz: 2e7e74cc6f67618fc3111e4728c80208077ac1d16ad7b4b87b2c8b8972d5c333
4
+ data.tar.gz: 855906a70e509751ba12563fa8c2a4637d25c3d50e56db8f1ac637f13c725169
5
5
  SHA512:
6
- metadata.gz: d5f87b0a0fb8d9ca5bc066c8790cee02d0f12bb12fd10b9ca2ca57f87b8749e2c4650a718ce244caccbd297b0f3ea4b81436db17ab83454032e6149afa7548f5
7
- data.tar.gz: f877c7e824aa82285bcc93de1e7b9c88bef392c505fb6ab49ba4435b38329946298420ead7a207fdfb938fa4d7a9d438ec852d52f202895208997b039eed4520
6
+ metadata.gz: 85e261794604f4c9d5f2415ac94f989a68ba093391e939168a20807d97896febe81fb64ec686b7009e1261150f342259c8f199a0a10707744fc3c50502328145
7
+ data.tar.gz: 8f6f4e9a481f2571e6bc0c43daa58ec52c6263c0cb99b5e27182628753509030c38cd12459b48ba6f2fc7f1f2cd5f0cf228111819898967620f2a7d5bf6866af
@@ -0,0 +1,123 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 3,
6
+ "metadata": {
7
+ "scrolled": false
8
+ },
9
+ "outputs": [
10
+ {
11
+ "ename": "LoadError",
12
+ "evalue": "cannot infer basepath",
13
+ "output_type": "error",
14
+ "traceback": [
15
+ "\u001b[31mLoadError\u001b[0m: cannot infer basepath",
16
+ "\u001b[37m<main>:2:in `require_relative'\u001b[0m",
17
+ "\u001b[37m<main>:2:in `<main>'\u001b[0m",
18
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval'\u001b[0m",
19
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval'\u001b[0m",
20
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m",
21
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m",
22
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m",
23
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m",
24
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m",
25
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m",
26
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/gems/iruby-0.3/bin/iruby:5:in `<top (required)>'\u001b[0m",
27
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.7.1/bin/iruby:23:in `load'\u001b[0m",
28
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.7.1/bin/iruby:23:in `<main>'\u001b[0m",
29
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `eval'\u001b[0m",
30
+ "\u001b[37m/Users/yoshida/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `<main>'\u001b[0m"
31
+ ]
32
+ }
33
+ ],
34
+ "source": [
35
+ "$LOAD_PATH << File.dirname(__FILE__) + \"/../lib\"\n",
36
+ "require 'toji'\n",
37
+ "require './example_core'\n",
38
+ "require 'rbplotly'\n",
39
+ "\n",
40
+ "cal = Toji::Calendar.new\n",
41
+ ".add(Example::Product.create(\n",
42
+ " name: \"仕1\",\n",
43
+ " description: \"姫野国夫による酒母省略仕込\",\n",
44
+ " recipe: Example::Recipe::TEMPLATES[:simple_sokujo_himeno].scale(600).round(0),\n",
45
+ " start_date: Time.mktime(2020, 2, 24)\n",
46
+ "))\n",
47
+ ".add(Example::Product.create(\n",
48
+ " name: \"仕2\",\n",
49
+ " description: \"姫野国夫による酒母省略仕込\",\n",
50
+ " recipe: Example::Recipe::TEMPLATES[:simple_sokujo_himeno].scale(550).round(0).tap {|r|\n",
51
+ " r.steps[0].kake_interval_days = 5\n",
52
+ " r.steps[2].kake_interval_days = 3\n",
53
+ " },\n",
54
+ " start_date: Time.mktime(2020, 2, 27)\n",
55
+ "))\n",
56
+ ".add(Example::Product.create(\n",
57
+ " name: \"仕3\",\n",
58
+ " description: \"灘における仕込配合\",\n",
59
+ " recipe: Example::Recipe::TEMPLATES[:sokujo_nada].scale(900).round(0).tap {|r|\n",
60
+ " r.steps[1].koji_interval_days = 11\n",
61
+ " r.steps[1].kake_interval_days = 13\n",
62
+ " },\n",
63
+ " start_date: Time.mktime(2020, 2, 20)\n",
64
+ "))\n",
65
+ ".add(Example::Product.create(\n",
66
+ " name: \"仕4\",\n",
67
+ " description: \"酒造教本による標準型仕込配合\",\n",
68
+ " recipe: Example::Recipe::TEMPLATES[:sokujo_textbook].scale(900).round(0),\n",
69
+ " start_date: Time.mktime(2020, 2, 20)\n",
70
+ "))\n",
71
+ ".add(Example::Product.create(\n",
72
+ " name: \"仕5\",\n",
73
+ " description: \"灘における仕込配合\",\n",
74
+ " recipe: Example::Recipe::TEMPLATES[:sokujo_nada].scale(900).round(0).tap {|r|\n",
75
+ " r.steps[1].koji_interval_days = 11\n",
76
+ " r.steps[1].kake_interval_days = 13\n",
77
+ " },\n",
78
+ " start_date: Time.mktime(2020, 2, 27)\n",
79
+ "))\n",
80
+ ".add(Example::Product.create(\n",
81
+ " name: \"仕6\",\n",
82
+ " description: \"酒造教本による標準型仕込配合\",\n",
83
+ " recipe: Example::Recipe::TEMPLATES[:sokujo_textbook].scale(900).round(0),\n",
84
+ " start_date: Time.mktime(2020, 2, 27)\n",
85
+ "))\n",
86
+ "\n",
87
+ "cal.products.each {|product|\n",
88
+ " puts \"%s %s\" % [product.name, product.description]\n",
89
+ " \n",
90
+ " product.recipe.table.tap {|t|\n",
91
+ " t.layout.height = 350\n",
92
+ " }.show\n",
93
+ "}\n",
94
+ "\n",
95
+ "cal.table.tap {|t|\n",
96
+ " t.layout.height = 1000\n",
97
+ "}.show"
98
+ ]
99
+ },
100
+ {
101
+ "cell_type": "code",
102
+ "execution_count": null,
103
+ "metadata": {},
104
+ "outputs": [],
105
+ "source": []
106
+ }
107
+ ],
108
+ "metadata": {
109
+ "kernelspec": {
110
+ "display_name": "Ruby 2.7.1",
111
+ "language": "ruby",
112
+ "name": "ruby"
113
+ },
114
+ "language_info": {
115
+ "file_extension": ".rb",
116
+ "mimetype": "application/x-ruby",
117
+ "name": "ruby",
118
+ "version": "2.6.3"
119
+ }
120
+ },
121
+ "nbformat": 4,
122
+ "nbformat_minor": 2
123
+ }
@@ -4,58 +4,34 @@ products:
4
4
  recipe: :simple_sokujo_himeno
5
5
  scale: 600
6
6
  round: 0
7
- koji_dates: 2020-2-24
8
- rice_dates: 2020-3-1
9
- moto_days: 1
10
- odori_days: 1
7
+ start_date: 2020-2-24
11
8
  - name: 仕2
12
9
  description: 姫野国夫による酒母省略仕込
13
10
  recipe: :simple_sokujo_himeno
14
11
  scale: 550
15
12
  round: 0
16
- koji_dates: 2020-2-27
17
- rice_dates: 2020-3-3
13
+ start_date: 2020-2-27
18
14
  - name: 仕3
19
15
  description: 灘における仕込配合
20
16
  recipe: :sokujo_nada
21
17
  scale: 900
22
18
  round: 0
23
- koji_dates:
24
- - 2020-2-20
25
- - 2020-3-2
26
- rice_dates:
27
- - 2020-2-25
28
- - 2020-3-9
19
+ start_date: 2020-2-20
29
20
  - name: 仕4
30
21
  description: 酒造教本による標準型仕込配合
31
22
  recipe: :sokujo_textbook
32
23
  scale: 900
33
24
  round: 0
34
- koji_dates:
35
- - 2020-2-20
36
- - 2020-3-5
37
- rice_dates:
38
- - 2020-2-25
39
- - 2020-3-11
25
+ start_date: 2020-2-20
40
26
  - name: 仕5
41
27
  description: 灘における仕込配合
42
28
  recipe: :sokujo_nada
43
29
  scale: 900
44
30
  round: 0
45
- koji_dates:
46
- - 2020-2-27
47
- - 2020-3-9
48
- rice_dates:
49
- - 2020-3-3
50
- - 2020-3-16
31
+ start_date: 2020-2-27
51
32
  - name: 仕6
52
33
  description: 酒造教本による標準型仕込配合
53
34
  recipe: :sokujo_textbook
54
35
  scale: 900
55
36
  round: 0
56
- koji_dates:
57
- - 2020-2-27
58
- - 2020-3-12
59
- rice_dates:
60
- - 2020-3-3
61
- - 2020-3-18
37
+ start_date: 2020-2-27
@@ -0,0 +1,338 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 2,
6
+ "metadata": {
7
+ "scrolled": false
8
+ },
9
+ "outputs": [
10
+ {
11
+ "name": "stdout",
12
+ "output_type": "stream",
13
+ "text": [
14
+ "仕1 姫野国夫による酒母省略仕込\n"
15
+ ]
16
+ },
17
+ {
18
+ "data": {
19
+ "text/html": [
20
+ "\n",
21
+ " <script>\n",
22
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
23
+ " </script>\n",
24
+ "\n",
25
+ "\n",
26
+ "<div id=\"ef47bf4d-9bcb-4925-97a3-fd68ec7a1337\" style=\"height: 100%; width: 100%;\"></div>\n",
27
+ "\n",
28
+ "<script>\n",
29
+ " require(['plotly'], function(Plotly) { \n",
30
+ "Plotly.newPlot(\n",
31
+ " 'ef47bf4d-9bcb-4925-97a3-fd68ec7a1337',\n",
32
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"yodan\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[35,\"\",35,\"\",123,0.8],[65,65,\"\",\"\",\"\",\"\"],[200,150,50,\"\",200,\"\"],[300,245,55,\"\",400,\"\"],[\"\",\"\",\"\",\"\",128,\"\"],[600,460,140,\"\",851,0.8]]}}],\n",
33
+ " {\"height\":350},\n",
34
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
35
+ ")\n",
36
+ "\n",
37
+ "window.addEventListener('resize', function() {\n",
38
+ " Plotly.Plots.resize(document.getElementById('ef47bf4d-9bcb-4925-97a3-fd68ec7a1337'))\n",
39
+ "})\n",
40
+ " }) \n",
41
+ "</script>"
42
+ ],
43
+ "text/plain": [
44
+ "#<Plotly::Offline::HTML:0x00007fbda2abb280 @id=\"ef47bf4d-9bcb-4925-97a3-fd68ec7a1337\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :yodan, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [35, \"\", 35, \"\", 123, 0.8], [65, 65, \"\", \"\", \"\", \"\"], [200, 150, 50, \"\", 200, \"\"], [300, 245, 55, \"\", 400, \"\"], [\"\", \"\", \"\", \"\", 128, \"\"], [600, 460, 140, \"\", 851, 0.8]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
45
+ ]
46
+ },
47
+ "metadata": {},
48
+ "output_type": "display_data"
49
+ },
50
+ {
51
+ "name": "stdout",
52
+ "output_type": "stream",
53
+ "text": [
54
+ "仕2 姫野国夫による酒母省略仕込\n"
55
+ ]
56
+ },
57
+ {
58
+ "data": {
59
+ "text/html": [
60
+ "\n",
61
+ " <script>\n",
62
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
63
+ " </script>\n",
64
+ "\n",
65
+ "\n",
66
+ "<div id=\"8df98a7d-df23-47ab-a927-3e9a01b48d2e\" style=\"height: 100%; width: 100%;\"></div>\n",
67
+ "\n",
68
+ "<script>\n",
69
+ " require(['plotly'], function(Plotly) { \n",
70
+ "Plotly.newPlot(\n",
71
+ " '8df98a7d-df23-47ab-a927-3e9a01b48d2e',\n",
72
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"yodan\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[32,\"\",32,\"\",112,0.733],[60,60,\"\",\"\",\"\",\"\"],[184,138,46,\"\",183,\"\"],[275,225,50,\"\",367,\"\"],[\"\",\"\",\"\",\"\",117,\"\"],[551,423,128,\"\",779,0.733]]}}],\n",
73
+ " {\"height\":350},\n",
74
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
75
+ ")\n",
76
+ "\n",
77
+ "window.addEventListener('resize', function() {\n",
78
+ " Plotly.Plots.resize(document.getElementById('8df98a7d-df23-47ab-a927-3e9a01b48d2e'))\n",
79
+ "})\n",
80
+ " }) \n",
81
+ "</script>"
82
+ ],
83
+ "text/plain": [
84
+ "#<Plotly::Offline::HTML:0x00007fbda1896f50 @id=\"8df98a7d-df23-47ab-a927-3e9a01b48d2e\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :yodan, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [32, \"\", 32, \"\", 112, 0.733], [60, 60, \"\", \"\", \"\", \"\"], [184, 138, 46, \"\", 183, \"\"], [275, 225, 50, \"\", 367, \"\"], [\"\", \"\", \"\", \"\", 117, \"\"], [551, 423, 128, \"\", 779, 0.733]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
85
+ ]
86
+ },
87
+ "metadata": {},
88
+ "output_type": "display_data"
89
+ },
90
+ {
91
+ "name": "stdout",
92
+ "output_type": "stream",
93
+ "text": [
94
+ "仕3 灘における仕込配合\n"
95
+ ]
96
+ },
97
+ {
98
+ "data": {
99
+ "text/html": [
100
+ "\n",
101
+ " <script>\n",
102
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
103
+ " </script>\n",
104
+ "\n",
105
+ "\n",
106
+ "<div id=\"d78081a8-5cee-4f67-860d-6d6b5d0aa475\" style=\"height: 100%; width: 100%;\"></div>\n",
107
+ "\n",
108
+ "<script>\n",
109
+ " require(['plotly'], function(Plotly) { \n",
110
+ "Plotly.newPlot(\n",
111
+ " 'd78081a8-5cee-4f67-860d-6d6b5d0aa475',\n",
112
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"alcohol\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[63,42,21,\"\",77,0.524],[143,98,45,\"\",122,\"\"],[254,190,64,\"\",302,\"\"],[440,366,74,\"\",599,\"\"],[\"\",\"\",\"\",405,\"\",\"\"],[900,696,204,405,1100,0.524]]}}],\n",
113
+ " {\"height\":350},\n",
114
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
115
+ ")\n",
116
+ "\n",
117
+ "window.addEventListener('resize', function() {\n",
118
+ " Plotly.Plots.resize(document.getElementById('d78081a8-5cee-4f67-860d-6d6b5d0aa475'))\n",
119
+ "})\n",
120
+ " }) \n",
121
+ "</script>"
122
+ ],
123
+ "text/plain": [
124
+ "#<Plotly::Offline::HTML:0x00007fbda1a08b18 @id=\"d78081a8-5cee-4f67-860d-6d6b5d0aa475\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :alcohol, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [63, 42, 21, \"\", 77, 0.524], [143, 98, 45, \"\", 122, \"\"], [254, 190, 64, \"\", 302, \"\"], [440, 366, 74, \"\", 599, \"\"], [\"\", \"\", \"\", 405, \"\", \"\"], [900, 696, 204, 405, 1100, 0.524]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
125
+ ]
126
+ },
127
+ "metadata": {},
128
+ "output_type": "display_data"
129
+ },
130
+ {
131
+ "name": "stdout",
132
+ "output_type": "stream",
133
+ "text": [
134
+ "仕4 酒造教本による標準型仕込配合\n"
135
+ ]
136
+ },
137
+ {
138
+ "data": {
139
+ "text/html": [
140
+ "\n",
141
+ " <script>\n",
142
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
143
+ " </script>\n",
144
+ "\n",
145
+ "\n",
146
+ "<div id=\"63af32b4-0619-436d-8f83-f1963e8383e5\" style=\"height: 100%; width: 100%;\"></div>\n",
147
+ "\n",
148
+ "<script>\n",
149
+ " require(['plotly'], function(Plotly) { \n",
150
+ "Plotly.newPlot(\n",
151
+ " '63af32b4-0619-436d-8f83-f1963e8383e5',\n",
152
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"yodan\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[59,41,18,\"\",63,0.432],[126,90,36,\"\",117,\"\"],[248,194,54,\"\",297,\"\"],[396,324,72,\"\",567,\"\"],[72,72,\"\",\"\",108,\"\"],[901,721,180,\"\",1152,0.432]]}}],\n",
153
+ " {\"height\":350},\n",
154
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
155
+ ")\n",
156
+ "\n",
157
+ "window.addEventListener('resize', function() {\n",
158
+ " Plotly.Plots.resize(document.getElementById('63af32b4-0619-436d-8f83-f1963e8383e5'))\n",
159
+ "})\n",
160
+ " }) \n",
161
+ "</script>"
162
+ ],
163
+ "text/plain": [
164
+ "#<Plotly::Offline::HTML:0x00007fbda1ac1b68 @id=\"63af32b4-0619-436d-8f83-f1963e8383e5\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :yodan, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [59, 41, 18, \"\", 63, 0.432], [126, 90, 36, \"\", 117, \"\"], [248, 194, 54, \"\", 297, \"\"], [396, 324, 72, \"\", 567, \"\"], [72, 72, \"\", \"\", 108, \"\"], [901, 721, 180, \"\", 1152, 0.432]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
165
+ ]
166
+ },
167
+ "metadata": {},
168
+ "output_type": "display_data"
169
+ },
170
+ {
171
+ "name": "stdout",
172
+ "output_type": "stream",
173
+ "text": [
174
+ "仕5 灘における仕込配合\n"
175
+ ]
176
+ },
177
+ {
178
+ "data": {
179
+ "text/html": [
180
+ "\n",
181
+ " <script>\n",
182
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
183
+ " </script>\n",
184
+ "\n",
185
+ "\n",
186
+ "<div id=\"ff91a220-d5ef-48fa-a18c-6780cf2ee0b8\" style=\"height: 100%; width: 100%;\"></div>\n",
187
+ "\n",
188
+ "<script>\n",
189
+ " require(['plotly'], function(Plotly) { \n",
190
+ "Plotly.newPlot(\n",
191
+ " 'ff91a220-d5ef-48fa-a18c-6780cf2ee0b8',\n",
192
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"alcohol\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[63,42,21,\"\",77,0.524],[143,98,45,\"\",122,\"\"],[254,190,64,\"\",302,\"\"],[440,366,74,\"\",599,\"\"],[\"\",\"\",\"\",405,\"\",\"\"],[900,696,204,405,1100,0.524]]}}],\n",
193
+ " {\"height\":350},\n",
194
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
195
+ ")\n",
196
+ "\n",
197
+ "window.addEventListener('resize', function() {\n",
198
+ " Plotly.Plots.resize(document.getElementById('ff91a220-d5ef-48fa-a18c-6780cf2ee0b8'))\n",
199
+ "})\n",
200
+ " }) \n",
201
+ "</script>"
202
+ ],
203
+ "text/plain": [
204
+ "#<Plotly::Offline::HTML:0x00007fbda0998328 @id=\"ff91a220-d5ef-48fa-a18c-6780cf2ee0b8\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :alcohol, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [63, 42, 21, \"\", 77, 0.524], [143, 98, 45, \"\", 122, \"\"], [254, 190, 64, \"\", 302, \"\"], [440, 366, 74, \"\", 599, \"\"], [\"\", \"\", \"\", 405, \"\", \"\"], [900, 696, 204, 405, 1100, 0.524]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
205
+ ]
206
+ },
207
+ "metadata": {},
208
+ "output_type": "display_data"
209
+ },
210
+ {
211
+ "name": "stdout",
212
+ "output_type": "stream",
213
+ "text": [
214
+ "仕6 酒造教本による標準型仕込配合\n"
215
+ ]
216
+ },
217
+ {
218
+ "data": {
219
+ "text/html": [
220
+ "\n",
221
+ " <script>\n",
222
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
223
+ " </script>\n",
224
+ "\n",
225
+ "\n",
226
+ "<div id=\"672166ec-9198-4c4f-80a6-f8505665c425\" style=\"height: 100%; width: 100%;\"></div>\n",
227
+ "\n",
228
+ "<script>\n",
229
+ " require(['plotly'], function(Plotly) { \n",
230
+ "Plotly.newPlot(\n",
231
+ " '672166ec-9198-4c4f-80a6-f8505665c425',\n",
232
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"\",\"moto\",\"soe\",\"naka\",\"tome\",\"yodan\",\"total\"]},\"cells\":{\"values\":[[\"rice_total\",\"kake\",\"koji\",\"alcohol\",\"water\",\"lactic_acid\"],[59,41,18,\"\",63,0.432],[126,90,36,\"\",117,\"\"],[248,194,54,\"\",297,\"\"],[396,324,72,\"\",567,\"\"],[72,72,\"\",\"\",108,\"\"],[901,721,180,\"\",1152,0.432]]}}],\n",
233
+ " {\"height\":350},\n",
234
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
235
+ ")\n",
236
+ "\n",
237
+ "window.addEventListener('resize', function() {\n",
238
+ " Plotly.Plots.resize(document.getElementById('672166ec-9198-4c4f-80a6-f8505665c425'))\n",
239
+ "})\n",
240
+ " }) \n",
241
+ "</script>"
242
+ ],
243
+ "text/plain": [
244
+ "#<Plotly::Offline::HTML:0x00007fbda2965750 @id=\"672166ec-9198-4c4f-80a6-f8505665c425\", @data=[{:type=>:table, :header=>{:values=>[\"\", :moto, :soe, :naka, :tome, :yodan, :total]}, :cells=>{:values=>[[:rice_total, :kake, :koji, :alcohol, :water, :lactic_acid], [59, 41, 18, \"\", 63, 0.432], [126, 90, 36, \"\", 117, \"\"], [248, 194, 54, \"\", 297, \"\"], [396, 324, 72, \"\", 567, \"\"], [72, 72, \"\", \"\", 108, \"\"], [901, 721, 180, \"\", 1152, 0.432]]}}], @layout={:height=>350}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
245
+ ]
246
+ },
247
+ "metadata": {},
248
+ "output_type": "display_data"
249
+ },
250
+ {
251
+ "data": {
252
+ "text/html": [
253
+ "\n",
254
+ " <script>\n",
255
+ " requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
256
+ " </script>\n",
257
+ "\n",
258
+ "\n",
259
+ "<div id=\"9c1394d0-2700-47e3-b52e-0008489de334\" style=\"height: 100%; width: 100%;\"></div>\n",
260
+ "\n",
261
+ "<script>\n",
262
+ " require(['plotly'], function(Plotly) { \n",
263
+ "Plotly.newPlot(\n",
264
+ " '9c1394d0-2700-47e3-b52e-0008489de334',\n",
265
+ " [{\"type\":\"table\",\"header\":{\"values\":[\"date\",\"moto_koji\",\"moromi_koji\",\"moto\",\"soe\",\"naka\",\"tome\",\"yodan\"]},\"cells\":{\"values\":[[\"02/20\",\"02/21\",\"02/22\",\"02/23\",\"02/24\",\"02/25\",\"02/26\",\"02/27\",\"02/28\",\"02/29\",\"03/01\",\"03/02\",\"03/03\",\"03/04\",\"03/05\",\"03/06\",\"03/07\",\"03/08\",\"03/09\",\"03/10\",\"03/11\",\"03/12\",\"03/13\",\"03/14\",\"03/15\",\"03/16\",\"03/17\",\"03/18\",\"03/19\",\"03/20\",\"03/21\",\"03/22\",\"03/23\",\"03/24\",\"03/25\",\"03/26\",\"03/27\",\"03/28\",\"03/29\",\"03/30\",\"03/31\",\"04/01\",\"04/02\",\"04/03\",\"04/04\",\"04/05\",\"04/06\",\"04/07\",\"04/08\",\"04/09\",\"04/10\",\"04/11\",\"04/12\",\"04/13\",\"04/14\",\"04/15\"],[\"仕3: 21\\u003cbr\\u003e仕4: 18\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕5: 21\\u003cbr\\u003e仕6: 18\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"仕1: 140\",\"\",\"\",\"仕2: 128\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕3: 183\\u003cbr\\u003e仕4: 162\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕5: 183\\u003cbr\\u003e仕6: 162\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"仕3: 42\\u003cbr\\u003e仕4: 41\",\"\",\"\",\"\",\"\",\"仕1: 0\",\"\",\"仕5: 42\\u003cbr\\u003e仕6: 41\",\"仕2: 0\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕1: 65\",\"\",\"\",\"仕2: 60\",\"\",\"\",\"\",\"\",\"\",\"仕3: 98\\u003cbr\\u003e仕4: 90\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕5: 98\\u003cbr\\u003e仕6: 90\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕1: 150\",\"\",\"\",\"仕2: 138\",\"\",\"\",\"\",\"\",\"\",\"仕3: 190\\u003cbr\\u003e仕4: 194\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕5: 190\\u003cbr\\u003e仕6: 194\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕1: 245\",\"\",\"\",\"仕2: 225\",\"\",\"\",\"\",\"\",\"\",\"仕3: 366\\u003cbr\\u003e仕4: 324\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕5: 366\\u003cbr\\u003e仕6: 324\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕4: 72\",\"\",\"\",\"\",\"\",\"\",\"\",\"仕6: 72\"]]}}],\n",
266
+ " {\"height\":1000},\n",
267
+ " {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
268
+ ")\n",
269
+ "\n",
270
+ "window.addEventListener('resize', function() {\n",
271
+ " Plotly.Plots.resize(document.getElementById('9c1394d0-2700-47e3-b52e-0008489de334'))\n",
272
+ "})\n",
273
+ " }) \n",
274
+ "</script>"
275
+ ],
276
+ "text/plain": [
277
+ "#<Plotly::Offline::HTML:0x00007fbda2a569c0 @id=\"9c1394d0-2700-47e3-b52e-0008489de334\", @data=[{:type=>:table, :header=>{:values=>[:date, :moto_koji, :moromi_koji, :moto, :soe, :naka, :tome, :yodan]}, :cells=>{:values=>[[\"02/20\", \"02/21\", \"02/22\", \"02/23\", \"02/24\", \"02/25\", \"02/26\", \"02/27\", \"02/28\", \"02/29\", \"03/01\", \"03/02\", \"03/03\", \"03/04\", \"03/05\", \"03/06\", \"03/07\", \"03/08\", \"03/09\", \"03/10\", \"03/11\", \"03/12\", \"03/13\", \"03/14\", \"03/15\", \"03/16\", \"03/17\", \"03/18\", \"03/19\", \"03/20\", \"03/21\", \"03/22\", \"03/23\", \"03/24\", \"03/25\", \"03/26\", \"03/27\", \"03/28\", \"03/29\", \"03/30\", \"03/31\", \"04/01\", \"04/02\", \"04/03\", \"04/04\", \"04/05\", \"04/06\", \"04/07\", \"04/08\", \"04/09\", \"04/10\", \"04/11\", \"04/12\", \"04/13\", \"04/14\", \"04/15\"], [\"仕3: 21<br>仕4: 18\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕5: 21<br>仕6: 18\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"仕1: 140\", \"\", \"\", \"仕2: 128\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕3: 183<br>仕4: 162\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕5: 183<br>仕6: 162\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"仕3: 42<br>仕4: 41\", \"\", \"\", \"\", \"\", \"仕1: 0\", \"\", \"仕5: 42<br>仕6: 41\", \"仕2: 0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕1: 65\", \"\", \"\", \"仕2: 60\", \"\", \"\", \"\", \"\", \"\", \"仕3: 98<br>仕4: 90\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕5: 98<br>仕6: 90\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕1: 150\", \"\", \"\", \"仕2: 138\", \"\", \"\", \"\", \"\", \"\", \"仕3: 190<br>仕4: 194\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕5: 190<br>仕6: 194\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕1: 245\", \"\", \"\", \"仕2: 225\", \"\", \"\", \"\", \"\", \"\", \"仕3: 366<br>仕4: 324\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕5: 366<br>仕6: 324\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕4: 72\", \"\", \"\", \"\", \"\", \"\", \"\", \"仕6: 72\"]]}}], @layout={:height=>1000}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
278
+ ]
279
+ },
280
+ "metadata": {},
281
+ "output_type": "display_data"
282
+ },
283
+ {
284
+ "data": {
285
+ "text/plain": [
286
+ "#<CZTop::Socket::PUB:0x7fbda512f9a0 last_endpoint=\"tcp://127.0.0.1:56639\">"
287
+ ]
288
+ },
289
+ "execution_count": 2,
290
+ "metadata": {},
291
+ "output_type": "execute_result"
292
+ }
293
+ ],
294
+ "source": [
295
+ "$LOAD_PATH << File.dirname(__FILE__) + \"/../lib\"\n",
296
+ "require 'toji'\n",
297
+ "require './example_core'\n",
298
+ "require 'rbplotly'\n",
299
+ "\n",
300
+ "cal = Example::Calendar.load_yaml_file(\"calendar.yaml\")\n",
301
+ "\n",
302
+ "cal.products.each {|product|\n",
303
+ " puts \"%s %s\" % [product.name, product.description]\n",
304
+ " \n",
305
+ " product.recipe.table.tap {|t|\n",
306
+ " t.layout.height = 350\n",
307
+ " }.show\n",
308
+ "}\n",
309
+ "\n",
310
+ "cal.table.tap {|t|\n",
311
+ " t.layout.height = 1000\n",
312
+ "}.show"
313
+ ]
314
+ },
315
+ {
316
+ "cell_type": "code",
317
+ "execution_count": null,
318
+ "metadata": {},
319
+ "outputs": [],
320
+ "source": []
321
+ }
322
+ ],
323
+ "metadata": {
324
+ "kernelspec": {
325
+ "display_name": "Ruby 2.7.1",
326
+ "language": "ruby",
327
+ "name": "ruby"
328
+ },
329
+ "language_info": {
330
+ "file_extension": ".rb",
331
+ "mimetype": "application/x-ruby",
332
+ "name": "ruby",
333
+ "version": "2.6.3"
334
+ }
335
+ },
336
+ "nbformat": 4,
337
+ "nbformat_minor": 2
338
+ }