toji 2.5.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/example/calendar.ipynb +6 -6
- data/example/calendar.yaml +6 -6
- data/example/example_core.rb +6 -5
- data/example/moromi.ipynb +24 -24
- data/example/{shubo.rb → moto.rb} +2 -2
- data/example/{shubo.yaml → moto.yaml} +0 -0
- data/lib/toji/brew.rb +1 -1
- data/lib/toji/brew/graph/ab.rb +14 -4
- data/lib/toji/brew/moromi.rb +2 -2
- data/lib/toji/brew/{shubo.rb → moto.rb} +1 -1
- data/lib/toji/calendar.rb +2 -2
- data/lib/toji/calendar/date_column.rb +4 -4
- data/lib/toji/product.rb +60 -32
- data/lib/toji/product/event.rb +4 -35
- data/lib/toji/product/rice_event.rb +28 -0
- data/lib/toji/product/rice_event_group.rb +19 -0
- data/lib/toji/recipe.rb +21 -5
- data/lib/toji/recipe/ab_expect.rb +8 -0
- data/lib/toji/recipe/step.rb +40 -16
- data/lib/toji/version.rb +1 -1
- metadata +8 -6
- data/example/shubo.ipynb +0 -121
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6064acd8dc9d6655025954b4f6e7af6eb2ff57a5e96b8b3bab0b1dd9840fd892
         | 
| 4 | 
            +
              data.tar.gz: 91bb99e9d7b664863773e5b1bf52e7fbb1bd0bf3961ace3b7b1d874b4963d437
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 23dbc8597c3c9e366d14e5aaf02bcca1b3512d244ae52e789ef918f392e5504f9e2acbceeb3a2174f11239dcb8966b4b6d82ac3b03df6fdaa7ed8dc7e1adbb1d
         | 
| 7 | 
            +
              data.tar.gz: bf3d505d1e0e7770d4efa74df9c67e8638eebfe622127feb854716be2c07ea268b853b84462b3f7e5920dc8892ad1b1be633633456e916a8a3c01cb6baf68be2
         | 
    
        data/example/calendar.ipynb
    CHANGED
    
    | @@ -302,7 +302,7 @@ | |
| 302 302 | 
             
                "  name: \"仕1\",\n",
         | 
| 303 303 | 
             
                "  description: \"姫野国夫による酒母省略仕込\",\n",
         | 
| 304 304 | 
             
                "  recipe: Example::Recipe::TEMPLATES[:simple_sokujo_himeno].scale(600).round(0),\n",
         | 
| 305 | 
            -
                "   | 
| 305 | 
            +
                "  base_date: Time.mktime(2020, 2, 24)\n",
         | 
| 306 306 | 
             
                "))\n",
         | 
| 307 307 | 
             
                ".add(Example::Product.create(\n",
         | 
| 308 308 | 
             
                "  name: \"仕2\",\n",
         | 
| @@ -311,7 +311,7 @@ | |
| 311 311 | 
             
                "    r.steps[0].kake_interval_days = 5\n",
         | 
| 312 312 | 
             
                "    r.steps[2].kake_interval_days = 3\n",
         | 
| 313 313 | 
             
                "  },\n",
         | 
| 314 | 
            -
                "   | 
| 314 | 
            +
                "  base_date: Time.mktime(2020, 2, 27)\n",
         | 
| 315 315 | 
             
                "))\n",
         | 
| 316 316 | 
             
                ".add(Example::Product.create(\n",
         | 
| 317 317 | 
             
                "  name: \"仕3\",\n",
         | 
| @@ -320,13 +320,13 @@ | |
| 320 320 | 
             
                "    r.steps[1].koji_interval_days = 11\n",
         | 
| 321 321 | 
             
                "    r.steps[1].kake_interval_days = 13\n",
         | 
| 322 322 | 
             
                "  },\n",
         | 
| 323 | 
            -
                "   | 
| 323 | 
            +
                "  base_date: Time.mktime(2020, 2, 20)\n",
         | 
| 324 324 | 
             
                "))\n",
         | 
| 325 325 | 
             
                ".add(Example::Product.create(\n",
         | 
| 326 326 | 
             
                "  name: \"仕4\",\n",
         | 
| 327 327 | 
             
                "  description: \"酒造教本による標準型仕込配合\",\n",
         | 
| 328 328 | 
             
                "  recipe: Example::Recipe::TEMPLATES[:sokujo_textbook].scale(900).round(0),\n",
         | 
| 329 | 
            -
                "   | 
| 329 | 
            +
                "  base_date: Time.mktime(2020, 2, 20)\n",
         | 
| 330 330 | 
             
                "))\n",
         | 
| 331 331 | 
             
                ".add(Example::Product.create(\n",
         | 
| 332 332 | 
             
                "  name: \"仕5\",\n",
         | 
| @@ -335,13 +335,13 @@ | |
| 335 335 | 
             
                "    r.steps[1].koji_interval_days = 11\n",
         | 
| 336 336 | 
             
                "    r.steps[1].kake_interval_days = 13\n",
         | 
| 337 337 | 
             
                "  },\n",
         | 
| 338 | 
            -
                "   | 
| 338 | 
            +
                "  base_date: Time.mktime(2020, 2, 27)\n",
         | 
| 339 339 | 
             
                "))\n",
         | 
| 340 340 | 
             
                ".add(Example::Product.create(\n",
         | 
| 341 341 | 
             
                "  name: \"仕6\",\n",
         | 
| 342 342 | 
             
                "  description: \"酒造教本による標準型仕込配合\",\n",
         | 
| 343 343 | 
             
                "  recipe: Example::Recipe::TEMPLATES[:sokujo_textbook].scale(900).round(0),\n",
         | 
| 344 | 
            -
                "   | 
| 344 | 
            +
                "  base_date: Time.mktime(2020, 2, 27)\n",
         | 
| 345 345 | 
             
                "))\n",
         | 
| 346 346 | 
             
                "\n",
         | 
| 347 347 | 
             
                "cal.products.each {|product|\n",
         | 
    
        data/example/calendar.yaml
    CHANGED
    
    | @@ -4,34 +4,34 @@ products: | |
| 4 4 | 
             
              recipe: :simple_sokujo_himeno
         | 
| 5 5 | 
             
              scale: 600
         | 
| 6 6 | 
             
              round: 0
         | 
| 7 | 
            -
               | 
| 7 | 
            +
              base_date: 2020-2-24
         | 
| 8 8 | 
             
            - name: 仕2
         | 
| 9 9 | 
             
              description: 姫野国夫による酒母省略仕込
         | 
| 10 10 | 
             
              recipe: :simple_sokujo_himeno
         | 
| 11 11 | 
             
              scale: 550
         | 
| 12 12 | 
             
              round: 0
         | 
| 13 | 
            -
               | 
| 13 | 
            +
              base_date: 2020-2-27
         | 
| 14 14 | 
             
            - name: 仕3
         | 
| 15 15 | 
             
              description: 灘における仕込配合
         | 
| 16 16 | 
             
              recipe: :sokujo_nada
         | 
| 17 17 | 
             
              scale: 900
         | 
| 18 18 | 
             
              round: 0
         | 
| 19 | 
            -
               | 
| 19 | 
            +
              base_date: 2020-2-20
         | 
| 20 20 | 
             
            - name: 仕4
         | 
| 21 21 | 
             
              description: 酒造教本による標準型仕込配合
         | 
| 22 22 | 
             
              recipe: :sokujo_textbook
         | 
| 23 23 | 
             
              scale: 900
         | 
| 24 24 | 
             
              round: 0
         | 
| 25 | 
            -
               | 
| 25 | 
            +
              base_date: 2020-2-20
         | 
| 26 26 | 
             
            - name: 仕5
         | 
| 27 27 | 
             
              description: 灘における仕込配合
         | 
| 28 28 | 
             
              recipe: :sokujo_nada
         | 
| 29 29 | 
             
              scale: 900
         | 
| 30 30 | 
             
              round: 0
         | 
| 31 | 
            -
               | 
| 31 | 
            +
              base_date: 2020-2-27
         | 
| 32 32 | 
             
            - name: 仕6
         | 
| 33 33 | 
             
              description: 酒造教本による標準型仕込配合
         | 
| 34 34 | 
             
              recipe: :sokujo_textbook
         | 
| 35 35 | 
             
              scale: 900
         | 
| 36 36 | 
             
              round: 0
         | 
| 37 | 
            -
               | 
| 37 | 
            +
              base_date: 2020-2-27
         | 
    
        data/example/example_core.rb
    CHANGED
    
    | @@ -56,8 +56,8 @@ module Example | |
| 56 56 | 
             
                  include Toji::Brew::Koji
         | 
| 57 57 | 
             
                end
         | 
| 58 58 |  | 
| 59 | 
            -
                class  | 
| 60 | 
            -
                  include Toji::Brew:: | 
| 59 | 
            +
                class Moto < Base
         | 
| 60 | 
            +
                  include Toji::Brew::Moto
         | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 63 | 
             
                class Moromi < Base
         | 
| @@ -68,6 +68,7 @@ module Example | |
| 68 68 |  | 
| 69 69 | 
             
              class Step
         | 
| 70 70 | 
             
                include Toji::Recipe::Step
         | 
| 71 | 
            +
                attr_accessor :name
         | 
| 71 72 |  | 
| 72 73 | 
             
                def self.create(name:, kake: 0, koji: 0, water: 0, lactic_acid: 0, alcohol: 0, yeast: 0, koji_interval_days: 0, kake_interval_days: 0)
         | 
| 73 74 | 
             
                  new.tap {|o|
         | 
| @@ -249,12 +250,12 @@ module Example | |
| 249 250 | 
             
                attr_accessor :description
         | 
| 250 251 | 
             
                attr_accessor :color
         | 
| 251 252 |  | 
| 252 | 
            -
                def initialize(reduce_key, name, description, recipe,  | 
| 253 | 
            +
                def initialize(reduce_key, name, description, recipe, base_date, color=nil)
         | 
| 253 254 | 
             
                  @reduce_key = reduce_key || SecureRandom.uuid
         | 
| 254 255 | 
             
                  @name = name
         | 
| 255 256 | 
             
                  @description = description
         | 
| 256 257 | 
             
                  @recipe = recipe
         | 
| 257 | 
            -
                  @ | 
| 258 | 
            +
                  @base_date = base_date
         | 
| 258 259 | 
             
                  @color = color
         | 
| 259 260 | 
             
                end
         | 
| 260 261 |  | 
| @@ -278,7 +279,7 @@ module Example | |
| 278 279 | 
             
                      args[:name],
         | 
| 279 280 | 
             
                      args[:description],
         | 
| 280 281 | 
             
                      recipe,
         | 
| 281 | 
            -
                      args[: | 
| 282 | 
            +
                      args[:base_date],
         | 
| 282 283 | 
             
                      args[:color]
         | 
| 283 284 | 
             
                    )
         | 
| 284 285 | 
             
                  else
         | 
    
        data/example/moromi.ipynb
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
             "cells": [
         | 
| 3 3 | 
             
              {
         | 
| 4 4 | 
             
               "cell_type": "code",
         | 
| 5 | 
            -
               "execution_count":  | 
| 5 | 
            +
               "execution_count": 4,
         | 
| 6 6 | 
             
               "metadata": {
         | 
| 7 7 | 
             
                "scrolled": false
         | 
| 8 8 | 
             
               },
         | 
| @@ -16,25 +16,25 @@ | |
| 16 16 | 
             
                   "  </script>\n",
         | 
| 17 17 | 
             
                   "\n",
         | 
| 18 18 | 
             
                   "\n",
         | 
| 19 | 
            -
                   "<div id=\" | 
| 19 | 
            +
                   "<div id=\"0e89b2f2-9a2a-4713-ba37-1f73b14ca4dd\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 20 20 | 
             
                   "\n",
         | 
| 21 21 | 
             
                   "<script>\n",
         | 
| 22 22 | 
             
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 23 23 | 
             
                   "Plotly.newPlot(\n",
         | 
| 24 | 
            -
                   "  ' | 
| 25 | 
            -
                   "  [{\"x\":[0.0,1.0,86400.0,172800.0,259200.0,259201.0,345600.0,345601.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[14.8,11.0,14.3,11.3,6.9,10.6,7.5,8.0,9.1,10.4,11.9,12.3,13.1,13.1,12.9,12.8,12.9,12.6,12.0,11.2,10.2,9.7,9.8,9.1,8.4,8.1,8.3,8.1],\"text\":[\"01/16 00:00\",\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"temps\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#1f77b4\"}},{\"x\":[0.0,86400.0,172800.0,259200.0,345600.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[9,9,8.5,9,6,7,7,8,8,7.5,7.5,7.5,7.0,8.0,8.0,7.0,7.0,6.5,7.0,8.0,6.0,5.0,5.0,7.0,6.0],\"text\":[\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"room_temp\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#2ca02c\"}},{\"x\":[604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0],\"y\":[8.6,8.0,7.2,5.8,4.8,4.0,3.4,2.7,2.1,1. | 
| 24 | 
            +
                   "  '0e89b2f2-9a2a-4713-ba37-1f73b14ca4dd',\n",
         | 
| 25 | 
            +
                   "  [{\"x\":[0.0,1.0,86400.0,172800.0,259200.0,259201.0,345600.0,345601.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[14.8,11.0,14.3,11.3,6.9,10.6,7.5,8.0,9.1,10.4,11.9,12.3,13.1,13.1,12.9,12.8,12.9,12.6,12.0,11.2,10.2,9.7,9.8,9.1,8.4,8.1,8.3,8.1],\"text\":[\"01/16 00:00\",\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"temps\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#1f77b4\"}},{\"x\":[0.0,86400.0,172800.0,259200.0,345600.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1555200.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0,2073600.0],\"y\":[9,9,8.5,9,6,7,7,8,8,7.5,7.5,7.5,7.0,8.0,8.0,7.0,7.0,6.5,7.0,8.0,6.0,5.0,5.0,7.0,6.0],\"text\":[\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],\"name\":\"room_temp\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#2ca02c\"}},{\"x\":[604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0],\"y\":[8.6,8.0,7.2,5.8,4.8,4.0,3.4,2.7,2.1,1.7,1.3,0.8,0.5,0.3,0.2,-0.0],\"text\":[\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\"],\"name\":\"baume\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#9467bd\"}},{\"x\":[691200.0,777600.0,864000.0,1036800.0,1123200.0,1209600.0,1296000.0,1641600.0,1814400.0],\"y\":[4.8,6.75,7.992,10.7,11.6,12.7,13.7,16.0,16.3],\"text\":[\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/04 00:00\",\"02/06 00:00\"],\"name\":\"alcohol\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#7f7f7f\"}},{\"x\":[604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0,1209600.0,1296000.0,1382400.0,1468800.0,1641600.0,1728000.0,1814400.0,1900800.0,1987200.0],\"y\":[34.4,40.0,43.2,40.6,38.4,36.0,34.0,29.700000000000003,25.200000000000003,22.099999999999998,18.2,12.8,8.5,5.3999999999999995,3.8000000000000003,-0.0],\"text\":[\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\"],\"name\":\"bmd\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#bcbd22\"}}],\n",
         | 
| 26 26 | 
             
                   "  {\"xaxis\":{\"dtick\":86400,\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1296000,1382400,1468800,1555200,1641600,1728000,1814400,1900800,1987200,2073600],\"ticktext\":[\"添\",\"踊\",\"踊\",\"仲\",\"留\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\",\"22\"]},\"annotations\":[{\"x\":0.0,\"y\":14.8,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"添\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40},{\"x\":259200.0,\"y\":6.9,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"仲\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40},{\"x\":345600.0,\"y\":7.5,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"留\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40}]},\n",
         | 
| 27 27 | 
             
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 28 28 | 
             
                   ")\n",
         | 
| 29 29 | 
             
                   "\n",
         | 
| 30 30 | 
             
                   "window.addEventListener('resize', function() {\n",
         | 
| 31 | 
            -
                   "  Plotly.Plots.resize(document.getElementById(' | 
| 31 | 
            +
                   "  Plotly.Plots.resize(document.getElementById('0e89b2f2-9a2a-4713-ba37-1f73b14ca4dd'))\n",
         | 
| 32 32 | 
             
                   "})\n",
         | 
| 33 33 | 
             
                   " }) \n",
         | 
| 34 34 | 
             
                   "</script>"
         | 
| 35 35 | 
             
                  ],
         | 
| 36 36 | 
             
                  "text/plain": [
         | 
| 37 | 
            -
                   "#<Plotly::Offline::HTML: | 
| 37 | 
            +
                   "#<Plotly::Offline::HTML:0x00007fe57118c758 @id=\"0e89b2f2-9a2a-4713-ba37-1f73b14ca4dd\", @data=[{:x=>[0.0, 1.0, 86400.0, 172800.0, 259200.0, 259201.0, 345600.0, 345601.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1555200.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0, 2073600.0], :y=>[14.8, 11.0, 14.3, 11.3, 6.9, 10.6, 7.5, 8.0, 9.1, 10.4, 11.9, 12.3, 13.1, 13.1, 12.9, 12.8, 12.9, 12.6, 12.0, 11.2, 10.2, 9.7, 9.8, 9.1, 8.4, 8.1, 8.3, 8.1], :text=>[\"01/16 00:00\", \"01/16 00:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/03 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\", \"02/09 00:00\"], :name=>\"temps\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#1f77b4\"}}, {:x=>[0.0, 86400.0, 172800.0, 259200.0, 345600.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1555200.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0, 2073600.0], :y=>[9, 9, 8.5, 9, 6, 7, 7, 8, 8, 7.5, 7.5, 7.5, 7.0, 8.0, 8.0, 7.0, 7.0, 6.5, 7.0, 8.0, 6.0, 5.0, 5.0, 7.0, 6.0], :text=>[\"01/16 00:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/03 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\", \"02/09 00:00\"], :name=>\"room_temp\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#2ca02c\"}}, {:x=>[604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0], :y=>[8.6, 8.0, 7.2, 5.8, 4.8, 4.0, 3.4, 2.7, 2.1, 1.7, 1.3, 0.8, 0.5, 0.3, 0.2, -0.0], :text=>[\"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\"], :name=>\"baume\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#9467bd\"}}, {:x=>[691200.0, 777600.0, 864000.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1641600.0, 1814400.0], :y=>[4.8, 6.75, 7.992, 10.7, 11.6, 12.7, 13.7, 16.0, 16.3], :text=>[\"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/04 00:00\", \"02/06 00:00\"], :name=>\"alcohol\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#7f7f7f\"}}, {:x=>[604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0, 1209600.0, 1296000.0, 1382400.0, 1468800.0, 1641600.0, 1728000.0, 1814400.0, 1900800.0, 1987200.0], :y=>[34.4, 40.0, 43.2, 40.6, 38.4, 36.0, 34.0, 29.700000000000003, 25.200000000000003, 22.099999999999998, 18.2, 12.8, 8.5, 5.3999999999999995, 3.8000000000000003, -0.0], :text=>[\"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\"], :name=>\"bmd\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#bcbd22\"}}], @layout={:xaxis=>{:dtick=>86400, :tickvals=>[0, 86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1209600, 1296000, 1382400, 1468800, 1555200, 1641600, 1728000, 1814400, 1900800, 1987200, 2073600], :ticktext=>[\"添\", \"踊\", \"踊\", \"仲\", \"留\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\"]}, :annotations=>[{:x=>0.0, :y=>14.8, :xref=>\"x\", :yref=>\"y\", :text=>\"添\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}, {:x=>259200.0, :y=>6.9, :xref=>\"x\", :yref=>\"y\", :text=>\"仲\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}, {:x=>345600.0, :y=>7.5, :xref=>\"x\", :yref=>\"y\", :text=>\"留\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}]}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 38 38 | 
             
                  ]
         | 
| 39 39 | 
             
                 },
         | 
| 40 40 | 
             
                 "metadata": {},
         | 
| @@ -49,25 +49,25 @@ | |
| 49 49 | 
             
                   "  </script>\n",
         | 
| 50 50 | 
             
                   "\n",
         | 
| 51 51 | 
             
                   "\n",
         | 
| 52 | 
            -
                   "<div id=\" | 
| 52 | 
            +
                   "<div id=\"7eb61d12-042e-4b84-9373-06ec2c071d79\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 53 53 | 
             
                   "\n",
         | 
| 54 54 | 
             
                   "<script>\n",
         | 
| 55 55 | 
             
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 56 56 | 
             
                   "Plotly.newPlot(\n",
         | 
| 57 | 
            -
                   "  ' | 
| 58 | 
            -
                   "  [{\"type\":\"table\",\"header\":{\"values\":[\"day_label\",\"display_time\",\"mark\",\"temps\",\"room_temp\",\"display_baume\",\"alcohol\",\"bmd\"]},\"cells\":{\"values\":[[\"添\",\"踊\",\"踊\",\"仲\",\"留\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\"],[\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],[\"添\",\"\",\"\",\"仲\",\"留\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"14.8, 11.0\",\"14.3\",\"11.3\",\"6.9, 10.6\",\"7.5, 8.0\",\"9.1\",\"10.4\",\"11.9\",\"12.3\",\"13.1\",\"13.1\",\"12.9\",\"12.8\",\"12.9\",\"12.6\",\"12.0\",\"11.2\",\"10.2\",\"9.7\",\"9.8\",\"9.1\",\"8.4\",\"8.1\",\"8.3\",\"8.1\"],[9 | 
| 57 | 
            +
                   "  '7eb61d12-042e-4b84-9373-06ec2c071d79',\n",
         | 
| 58 | 
            +
                   "  [{\"type\":\"table\",\"header\":{\"values\":[\"day_label\",\"display_time\",\"mark\",\"temps\",\"room_temp\",\"display_baume\",\"alcohol\",\"bmd\"]},\"cells\":{\"values\":[[\"添\",\"踊\",\"踊\",\"仲\",\"留\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\"],[\"01/16 00:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\",\"01/30 00:00\",\"01/31 00:00\",\"02/01 00:00\",\"02/02 00:00\",\"02/03 00:00\",\"02/04 00:00\",\"02/05 00:00\",\"02/06 00:00\",\"02/07 00:00\",\"02/08 00:00\",\"02/09 00:00\"],[\"添\",\"\",\"\",\"仲\",\"留\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"],[\"14.8, 11.0\",\"14.3\",\"11.3\",\"6.9, 10.6\",\"7.5, 8.0\",\"9.1\",\"10.4\",\"11.9\",\"12.3\",\"13.1\",\"13.1\",\"12.9\",\"12.8\",\"12.9\",\"12.6\",\"12.0\",\"11.2\",\"10.2\",\"9.7\",\"9.8\",\"9.1\",\"8.4\",\"8.1\",\"8.3\",\"8.1\"],[\"9\",\"9\",\"8.5\",\"9\",\"6\",\"7\",\"7\",\"8\",\"8\",\"7.5\",\"7.5\",\"7.5\",\"7.0\",\"8.0\",\"8.0\",\"7.0\",\"7.0\",\"6.5\",\"7.0\",\"8.0\",\"6.0\",\"5.0\",\"5.0\",\"7.0\",\"6.0\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"8.6\",\"8.0\",\"7.2\",\"5.8\",\"4.8\",\"4.0\",\"3.4\",\"-27.0\",\"-21.0\",\"-17.0\",\"-13.0\",\"\",\"-8.0\",\"-5.0\",\"-3.0\",\"-2.0\",\"0.0\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"4.8\",\"6.75\",\"7.992\",\"\",\"10.7\",\"11.6\",\"12.7\",\"13.7\",\"\",\"\",\"\",\"16.0\",\"\",\"16.3\",\"\",\"\",\"\"],[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"34.4\",\"40.0\",\"43.2\",\"40.6\",\"38.4\",\"36.0\",\"34.0\",\"29.7\",\"25.2\",\"22.1\",\"18.2\",\"\",\"12.8\",\"8.5\",\"5.4\",\"3.8\",\"-0.0\",\"\"]]}}],\n",
         | 
| 59 59 | 
             
                   "  {\"height\":1000},\n",
         | 
| 60 60 | 
             
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 61 61 | 
             
                   ")\n",
         | 
| 62 62 | 
             
                   "\n",
         | 
| 63 63 | 
             
                   "window.addEventListener('resize', function() {\n",
         | 
| 64 | 
            -
                   "  Plotly.Plots.resize(document.getElementById(' | 
| 64 | 
            +
                   "  Plotly.Plots.resize(document.getElementById('7eb61d12-042e-4b84-9373-06ec2c071d79'))\n",
         | 
| 65 65 | 
             
                   "})\n",
         | 
| 66 66 | 
             
                   " }) \n",
         | 
| 67 67 | 
             
                   "</script>"
         | 
| 68 68 | 
             
                  ],
         | 
| 69 69 | 
             
                  "text/plain": [
         | 
| 70 | 
            -
                   "#<Plotly::Offline::HTML: | 
| 70 | 
            +
                   "#<Plotly::Offline::HTML:0x00007fe5752c8690 @id=\"7eb61d12-042e-4b84-9373-06ec2c071d79\", @data=[{:type=>:table, :header=>{:values=>[:day_label, :display_time, :mark, :temps, :room_temp, :display_baume, :alcohol, :bmd]}, :cells=>{:values=>[[\"添\", \"踊\", \"踊\", \"仲\", \"留\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\"], [\"01/16 00:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\", \"01/30 00:00\", \"01/31 00:00\", \"02/01 00:00\", \"02/02 00:00\", \"02/03 00:00\", \"02/04 00:00\", \"02/05 00:00\", \"02/06 00:00\", \"02/07 00:00\", \"02/08 00:00\", \"02/09 00:00\"], [\"添\", \"\", \"\", \"仲\", \"留\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"], [\"14.8, 11.0\", \"14.3\", \"11.3\", \"6.9, 10.6\", \"7.5, 8.0\", \"9.1\", \"10.4\", \"11.9\", \"12.3\", \"13.1\", \"13.1\", \"12.9\", \"12.8\", \"12.9\", \"12.6\", \"12.0\", \"11.2\", \"10.2\", \"9.7\", \"9.8\", \"9.1\", \"8.4\", \"8.1\", \"8.3\", \"8.1\"], [\"9\", \"9\", \"8.5\", \"9\", \"6\", \"7\", \"7\", \"8\", \"8\", \"7.5\", \"7.5\", \"7.5\", \"7.0\", \"8.0\", \"8.0\", \"7.0\", \"7.0\", \"6.5\", \"7.0\", \"8.0\", \"6.0\", \"5.0\", \"5.0\", \"7.0\", \"6.0\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"8.6\", \"8.0\", \"7.2\", \"5.8\", \"4.8\", \"4.0\", \"3.4\", \"-27.0\", \"-21.0\", \"-17.0\", \"-13.0\", \"\", \"-8.0\", \"-5.0\", \"-3.0\", \"-2.0\", \"0.0\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"4.8\", \"6.75\", \"7.992\", \"\", \"10.7\", \"11.6\", \"12.7\", \"13.7\", \"\", \"\", \"\", \"16.0\", \"\", \"16.3\", \"\", \"\", \"\"], [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"34.4\", \"40.0\", \"43.2\", \"40.6\", \"38.4\", \"36.0\", \"34.0\", \"29.7\", \"25.2\", \"22.1\", \"18.2\", \"\", \"12.8\", \"8.5\", \"5.4\", \"3.8\", \"-0.0\", \"\"]]}}], @layout={:height=>1000}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 71 71 | 
             
                  ]
         | 
| 72 72 | 
             
                 },
         | 
| 73 73 | 
             
                 "metadata": {},
         | 
| @@ -82,25 +82,25 @@ | |
| 82 82 | 
             
                   "  </script>\n",
         | 
| 83 83 | 
             
                   "\n",
         | 
| 84 84 | 
             
                   "\n",
         | 
| 85 | 
            -
                   "<div id=\" | 
| 85 | 
            +
                   "<div id=\"1cbb8a13-f102-482a-8367-a98d4f4e480a\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 86 86 | 
             
                   "\n",
         | 
| 87 87 | 
             
                   "<script>\n",
         | 
| 88 88 | 
             
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 89 89 | 
             
                   "Plotly.newPlot(\n",
         | 
| 90 | 
            -
                   "  ' | 
| 91 | 
            -
                   "  [{\"x\":[345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1382400,1468800,1555200,1641600,1728000],\"y\":[34.4,40.0,43.2,40.6,38.4,36.0,34.0,29.700000000000003,25.200000000000003,22. | 
| 90 | 
            +
                   "  '1cbb8a13-f102-482a-8367-a98d4f4e480a',\n",
         | 
| 91 | 
            +
                   "  [{\"x\":[345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1382400,1468800,1555200,1641600,1728000],\"y\":[34.4,40.0,43.2,40.6,38.4,36.0,34.0,29.700000000000003,25.200000000000003,22.099999999999998,18.2,12.8,8.5,5.3999999999999995,3.8000000000000003,-0.0],\"text\":[\"01/23 00:00\\u003cbr /\\u003emoromi day=4, be=8.6, bmd=34.4\",\"01/24 00:00\\u003cbr /\\u003emoromi day=5, be=8.0, bmd=40.0\",\"01/25 00:00\\u003cbr /\\u003emoromi day=6, be=7.2, bmd=43.2\",\"01/26 00:00\\u003cbr /\\u003emoromi day=7, be=5.8, bmd=40.6\",\"01/27 00:00\\u003cbr /\\u003emoromi day=8, be=4.8, bmd=38.4\",\"01/28 00:00\\u003cbr /\\u003emoromi day=9, be=4.0, bmd=36.0\",\"01/29 00:00\\u003cbr /\\u003emoromi day=10, be=3.4, bmd=34.0\",\"01/30 00:00\\u003cbr /\\u003emoromi day=11, be=2.7, bmd=29.700000000000003\",\"01/31 00:00\\u003cbr /\\u003emoromi day=12, be=2.1, bmd=25.200000000000003\",\"02/01 00:00\\u003cbr /\\u003emoromi day=13, be=1.7, bmd=22.099999999999998\",\"02/02 00:00\\u003cbr /\\u003emoromi day=14, be=1.3, bmd=18.2\",\"02/04 00:00\\u003cbr /\\u003emoromi day=16, be=0.8, bmd=12.8\",\"02/05 00:00\\u003cbr /\\u003emoromi day=17, be=0.5, bmd=8.5\",\"02/06 00:00\\u003cbr /\\u003emoromi day=18, be=0.3, bmd=5.3999999999999995\",\"02/07 00:00\\u003cbr /\\u003emoromi day=19, be=0.2, bmd=3.8000000000000003\",\"02/08 00:00\\u003cbr /\\u003emoromi day=20, be=-0.0, bmd=-0.0\"],\"name\":\"actual\"}],\n",
         | 
| 92 92 | 
             
                   "  {\"xaxis\":{\"title\":\"Moromi day\",\"dtick\":86400,\"range\":[86400,1814400],\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200,1209600,1296000,1382400,1468800,1555200,1641600,1728000],\"ticktext\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]},\"yaxis\":{\"title\":\"BMD\"}},\n",
         | 
| 93 93 | 
             
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 94 94 | 
             
                   ")\n",
         | 
| 95 95 | 
             
                   "\n",
         | 
| 96 96 | 
             
                   "window.addEventListener('resize', function() {\n",
         | 
| 97 | 
            -
                   "  Plotly.Plots.resize(document.getElementById(' | 
| 97 | 
            +
                   "  Plotly.Plots.resize(document.getElementById('1cbb8a13-f102-482a-8367-a98d4f4e480a'))\n",
         | 
| 98 98 | 
             
                   "})\n",
         | 
| 99 99 | 
             
                   " }) \n",
         | 
| 100 100 | 
             
                   "</script>"
         | 
| 101 101 | 
             
                  ],
         | 
| 102 102 | 
             
                  "text/plain": [
         | 
| 103 | 
            -
                   "#<Plotly::Offline::HTML: | 
| 103 | 
            +
                   "#<Plotly::Offline::HTML:0x00007fe5753222d0 @id=\"1cbb8a13-f102-482a-8367-a98d4f4e480a\", @data=[{:x=>[345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1209600, 1382400, 1468800, 1555200, 1641600, 1728000], :y=>[34.4, 40.0, 43.2, 40.6, 38.4, 36.0, 34.0, 29.700000000000003, 25.200000000000003, 22.099999999999998, 18.2, 12.8, 8.5, 5.3999999999999995, 3.8000000000000003, -0.0], :text=>[\"01/23 00:00<br />moromi day=4, be=8.6, bmd=34.4\", \"01/24 00:00<br />moromi day=5, be=8.0, bmd=40.0\", \"01/25 00:00<br />moromi day=6, be=7.2, bmd=43.2\", \"01/26 00:00<br />moromi day=7, be=5.8, bmd=40.6\", \"01/27 00:00<br />moromi day=8, be=4.8, bmd=38.4\", \"01/28 00:00<br />moromi day=9, be=4.0, bmd=36.0\", \"01/29 00:00<br />moromi day=10, be=3.4, bmd=34.0\", \"01/30 00:00<br />moromi day=11, be=2.7, bmd=29.700000000000003\", \"01/31 00:00<br />moromi day=12, be=2.1, bmd=25.200000000000003\", \"02/01 00:00<br />moromi day=13, be=1.7, bmd=22.099999999999998\", \"02/02 00:00<br />moromi day=14, be=1.3, bmd=18.2\", \"02/04 00:00<br />moromi day=16, be=0.8, bmd=12.8\", \"02/05 00:00<br />moromi day=17, be=0.5, bmd=8.5\", \"02/06 00:00<br />moromi day=18, be=0.3, bmd=5.3999999999999995\", \"02/07 00:00<br />moromi day=19, be=0.2, bmd=3.8000000000000003\", \"02/08 00:00<br />moromi day=20, be=-0.0, bmd=-0.0\"], :name=>:actual}], @layout={:xaxis=>{:title=>\"Moromi day\", :dtick=>86400, :range=>[86400, 1814400], :tickvals=>[0, 86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200, 1209600, 1296000, 1382400, 1468800, 1555200, 1641600, 1728000], :ticktext=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]}, :yaxis=>{:title=>\"BMD\"}}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 104 104 | 
             
                  ]
         | 
| 105 105 | 
             
                 },
         | 
| 106 106 | 
             
                 "metadata": {},
         | 
| @@ -115,25 +115,25 @@ | |
| 115 115 | 
             
                   "  </script>\n",
         | 
| 116 116 | 
             
                   "\n",
         | 
| 117 117 | 
             
                   "\n",
         | 
| 118 | 
            -
                   "<div id=\" | 
| 118 | 
            +
                   "<div id=\"be5e3e28-c1f7-4993-b255-596bf278f355\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 119 119 | 
             
                   "\n",
         | 
| 120 120 | 
             
                   "<script>\n",
         | 
| 121 121 | 
             
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 122 122 | 
             
                   "Plotly.newPlot(\n",
         | 
| 123 | 
            -
                   "  ' | 
| 124 | 
            -
                   "  [{\"x\":[4.8,6.75,7.992,10.7,11.6,12.7,13.7,16.0,16.3],\"y\":[8.0,7.2,5.8,4.0,3.4,2.7,2.1,0.8,0. | 
| 123 | 
            +
                   "  'be5e3e28-c1f7-4993-b255-596bf278f355',\n",
         | 
| 124 | 
            +
                   "  [{\"x\":[4.8,6.75,7.992,10.7,11.6,12.7,13.7,16.0,16.3],\"y\":[8.0,7.2,5.8,4.0,3.4,2.7,2.1,0.8,0.3],\"text\":[\"01/24 00:00\\u003cbr /\\u003ealc=4.8, be=8.0\",\"01/25 00:00\\u003cbr /\\u003ealc=6.75, be=7.2\",\"01/26 00:00\\u003cbr /\\u003ealc=7.992, be=5.8\",\"01/28 00:00\\u003cbr /\\u003ealc=10.7, be=4.0\",\"01/29 00:00\\u003cbr /\\u003ealc=11.6, be=3.4\",\"01/30 00:00\\u003cbr /\\u003ealc=12.7, be=2.7\",\"01/31 00:00\\u003cbr /\\u003ealc=13.7, be=2.1\",\"02/04 00:00\\u003cbr /\\u003ealc=16.0, be=0.8\",\"02/06 00:00\\u003cbr /\\u003ealc=16.3, be=0.3\"],\"name\":\"actual\"},{\"x\":[16.08,4.879999999999999],\"y\":[0.0,8.0],\"name\":\"+3.0 16.5\"},{\"x\":[16.58,5.379999999999999],\"y\":[0.0,8.0],\"name\":\"+3.0 17.0\"},{\"x\":[16.5,5.300000000000001],\"y\":[0.0,8.0],\"name\":\"+0.0 16.5\"}],\n",
         | 
| 125 125 | 
             
                   "  {\"xaxis\":{\"title\":\"Alcohol\",\"dtick\":2,\"range\":[0,20]},\"yaxis\":{\"title\":\"Baume\",\"dtick\":1,\"range\":[0,10]}},\n",
         | 
| 126 126 | 
             
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 127 127 | 
             
                   ")\n",
         | 
| 128 128 | 
             
                   "\n",
         | 
| 129 129 | 
             
                   "window.addEventListener('resize', function() {\n",
         | 
| 130 | 
            -
                   "  Plotly.Plots.resize(document.getElementById(' | 
| 130 | 
            +
                   "  Plotly.Plots.resize(document.getElementById('be5e3e28-c1f7-4993-b255-596bf278f355'))\n",
         | 
| 131 131 | 
             
                   "})\n",
         | 
| 132 132 | 
             
                   " }) \n",
         | 
| 133 133 | 
             
                   "</script>"
         | 
| 134 134 | 
             
                  ],
         | 
| 135 135 | 
             
                  "text/plain": [
         | 
| 136 | 
            -
                   "#<Plotly::Offline::HTML: | 
| 136 | 
            +
                   "#<Plotly::Offline::HTML:0x00007fe575351b70 @id=\"be5e3e28-c1f7-4993-b255-596bf278f355\", @data=[{:x=>[4.8, 6.75, 7.992, 10.7, 11.6, 12.7, 13.7, 16.0, 16.3], :y=>[8.0, 7.2, 5.8, 4.0, 3.4, 2.7, 2.1, 0.8, 0.3], :text=>[\"01/24 00:00<br />alc=4.8, be=8.0\", \"01/25 00:00<br />alc=6.75, be=7.2\", \"01/26 00:00<br />alc=7.992, be=5.8\", \"01/28 00:00<br />alc=10.7, be=4.0\", \"01/29 00:00<br />alc=11.6, be=3.4\", \"01/30 00:00<br />alc=12.7, be=2.7\", \"01/31 00:00<br />alc=13.7, be=2.1\", \"02/04 00:00<br />alc=16.0, be=0.8\", \"02/06 00:00<br />alc=16.3, be=0.3\"], :name=>:actual}, {:x=>[16.08, 4.879999999999999], :y=>[0.0, 8.0], :name=>\"+3.0 16.5\"}, {:x=>[16.58, 5.379999999999999], :y=>[0.0, 8.0], :name=>\"+3.0 17.0\"}, {:x=>[16.5, 5.300000000000001], :y=>[0.0, 8.0], :name=>\"+0.0 16.5\"}], @layout={:xaxis=>{:title=>\"Alcohol\", :dtick=>2, :range=>[0, 20]}, :yaxis=>{:title=>\"Baume\", :dtick=>1, :range=>[0, 10]}}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 137 137 | 
             
                  ]
         | 
| 138 138 | 
             
                 },
         | 
| 139 139 | 
             
                 "metadata": {},
         | 
| @@ -142,10 +142,10 @@ | |
| 142 142 | 
             
                {
         | 
| 143 143 | 
             
                 "data": {
         | 
| 144 144 | 
             
                  "text/plain": [
         | 
| 145 | 
            -
                   "#<CZTop::Socket::PUB: | 
| 145 | 
            +
                   "#<CZTop::Socket::PUB:0x7fe5759f3ab0 last_endpoint=\"tcp://127.0.0.1:54895\">"
         | 
| 146 146 | 
             
                  ]
         | 
| 147 147 | 
             
                 },
         | 
| 148 | 
            -
                 "execution_count":  | 
| 148 | 
            +
                 "execution_count": 4,
         | 
| 149 149 | 
             
                 "metadata": {},
         | 
| 150 150 | 
             
                 "output_type": "execute_result"
         | 
| 151 151 | 
             
                }
         | 
| @@ -161,7 +161,7 @@ | |
| 161 161 | 
             
                "moromi.progress.table.tap{|t| t.layout.height=1000}.show\n",
         | 
| 162 162 | 
             
                "moromi.bmd.plot.show\n",
         | 
| 163 163 | 
             
                "\n",
         | 
| 164 | 
            -
                "moromi.ab(1. | 
| 164 | 
            +
                "moromi.ab(1.4)\n",
         | 
| 165 165 | 
             
                "  .expect(16.5, +3)\n",
         | 
| 166 166 | 
             
                "  .expect(17.0, +3)\n",
         | 
| 167 167 | 
             
                "  .expect(16.5, +0)\n",
         | 
| @@ -2,12 +2,12 @@ require 'toji' | |
| 2 2 | 
             
            require_relative 'example_core'
         | 
| 3 3 | 
             
            require 'terminal-table'
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 5 | 
            +
            moto = Example::Brew::Moto.load_yaml_file(File.dirname(__FILE__)+"/moto.yaml")
         | 
| 6 6 |  | 
| 7 7 | 
             
            table = Terminal::Table.new do |t|
         | 
| 8 8 | 
             
              t << ["作業", "日数", "品温(度)", "ボーメ", "酸度", "経過時間", "日時"]
         | 
| 9 9 | 
             
              t << :separator
         | 
| 10 | 
            -
               | 
| 10 | 
            +
              moto.wrapped_states.each {|s|
         | 
| 11 11 | 
             
                temp = s.temps.map(&:to_s).join(" / ")
         | 
| 12 12 | 
             
                t << [s.mark, s.day_label, temp, s.baume, s.acid, s.elapsed_time, s.display_time]
         | 
| 13 13 | 
             
              }
         | 
| 
            File without changes
         | 
    
        data/lib/toji/brew.rb
    CHANGED
    
    
    
        data/lib/toji/brew/graph/ab.rb
    CHANGED
    
    | @@ -2,14 +2,17 @@ module Toji | |
| 2 2 | 
             
              module Brew
         | 
| 3 3 | 
             
                module Graph
         | 
| 4 4 | 
             
                  class Ab
         | 
| 5 | 
            -
                     | 
| 6 | 
            -
             | 
| 7 | 
            -
                    def initialize(coef=1.5)
         | 
| 8 | 
            -
                      @coef = coef
         | 
| 5 | 
            +
                    def initialize
         | 
| 6 | 
            +
                      @coef = 1.0
         | 
| 9 7 | 
             
                      @actuals = []
         | 
| 10 8 | 
             
                      @expects = []
         | 
| 11 9 | 
             
                    end
         | 
| 12 10 |  | 
| 11 | 
            +
                    def coef(coef)
         | 
| 12 | 
            +
                      @coef = coef
         | 
| 13 | 
            +
                      self
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 13 16 | 
             
                    def actual(moromi, name=:actual)
         | 
| 14 17 | 
             
                      @actuals << [moromi, name]
         | 
| 15 18 | 
             
                      self
         | 
| @@ -20,6 +23,13 @@ module Toji | |
| 20 23 | 
             
                      self
         | 
| 21 24 | 
             
                    end
         | 
| 22 25 |  | 
| 26 | 
            +
                    def expects(expects)
         | 
| 27 | 
            +
                      expects.each {|o|
         | 
| 28 | 
            +
                        expect(o.alcohol, o.nihonshudo)
         | 
| 29 | 
            +
                      }
         | 
| 30 | 
            +
                      self
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 23 33 | 
             
                    def plot_data
         | 
| 24 34 | 
             
                      result = []
         | 
| 25 35 |  | 
    
        data/lib/toji/brew/moromi.rb
    CHANGED
    
    
    
        data/lib/toji/calendar.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Toji | |
| 16 16 | 
             
                alias_method :add, :<<
         | 
| 17 17 |  | 
| 18 18 | 
             
                def date_rows
         | 
| 19 | 
            -
                  events = @products.map{|product| product. | 
| 19 | 
            +
                  events = @products.map{|product| product.rice_events}.flatten
         | 
| 20 20 |  | 
| 21 21 | 
             
                  result = {}
         | 
| 22 22 | 
             
                  events.each {|event|
         | 
| @@ -28,7 +28,7 @@ module Toji | |
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 30 | 
             
                def table_data
         | 
| 31 | 
            -
                  events = @products.map{|product| product. | 
| 31 | 
            +
                  events = @products.map{|product| product.rice_events}.flatten
         | 
| 32 32 |  | 
| 33 33 | 
             
                  koji_len = events.select{|e| e.type==:koji}.map(&:group_index).max + 1
         | 
| 34 34 | 
             
                  kake_len = events.select{|e| e.type==:kake}.map(&:group_index).max + 1
         | 
| @@ -1,19 +1,19 @@ | |
| 1 1 | 
             
            module Toji
         | 
| 2 2 | 
             
              class Calendar
         | 
| 3 3 | 
             
                class DateColumn
         | 
| 4 | 
            -
                  attr_reader : | 
| 4 | 
            +
                  attr_reader :rice_events
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def initialize
         | 
| 7 | 
            -
                    @ | 
| 7 | 
            +
                    @rice_events = []
         | 
| 8 8 | 
             
                  end
         | 
| 9 9 |  | 
| 10 10 | 
             
                  def <<(event)
         | 
| 11 | 
            -
                    @ | 
| 11 | 
            +
                    @rice_events << event
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 | 
             
                  alias_method :add, :<<
         | 
| 14 14 |  | 
| 15 15 | 
             
                  def event_groups
         | 
| 16 | 
            -
                    @ | 
| 16 | 
            +
                    @rice_events.group_by {|e|
         | 
| 17 17 | 
             
                      e.group_key
         | 
| 18 18 | 
             
                    }.values
         | 
| 19 19 | 
             
                  end
         | 
    
        data/lib/toji/product.rb
    CHANGED
    
    | @@ -1,65 +1,93 @@ | |
| 1 1 | 
             
            require 'toji/product/event'
         | 
| 2 | 
            +
            require 'toji/product/rice_event'
         | 
| 3 | 
            +
            require 'toji/product/rice_event_group'
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Toji
         | 
| 4 6 | 
             
              module Product
         | 
| 5 7 | 
             
                attr_reader :reduce_key
         | 
| 6 8 | 
             
                attr_accessor :name
         | 
| 7 9 | 
             
                attr_accessor :recipe
         | 
| 8 | 
            -
                attr_accessor : | 
| 10 | 
            +
                attr_accessor :base_date
         | 
| 9 11 |  | 
| 10 12 | 
             
                def koji_dates
         | 
| 11 | 
            -
                  date =  | 
| 13 | 
            +
                  date = base_date
         | 
| 12 14 | 
             
                  recipe.steps.map {|step|
         | 
| 13 15 | 
             
                    date = date.next_day(step.koji_interval_days)
         | 
| 14 16 | 
             
                  }
         | 
| 15 17 | 
             
                end
         | 
| 16 18 |  | 
| 17 19 | 
             
                def kake_dates
         | 
| 18 | 
            -
                  date =  | 
| 20 | 
            +
                  date = base_date
         | 
| 19 21 | 
             
                  recipe.steps.map {|step|
         | 
| 20 22 | 
             
                    date = date.next_day(step.kake_interval_days)
         | 
| 21 23 | 
             
                  }
         | 
| 22 24 | 
             
                end
         | 
| 23 25 |  | 
| 24 | 
            -
                def  | 
| 25 | 
            -
                   | 
| 26 | 
            +
                def squeeze_date
         | 
| 27 | 
            +
                  base_date.next_day(recipe.squeeze_interval_days)
         | 
| 28 | 
            +
                end
         | 
| 26 29 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 30 | 
            +
                def koji_events
         | 
| 31 | 
            +
                  koji_dates.map.with_index {|date,i|
         | 
| 32 | 
            +
                    RiceEvent.new(
         | 
| 33 | 
            +
                      product: self,
         | 
| 34 | 
            +
                      type: :koji,
         | 
| 35 | 
            +
                      index: i,
         | 
| 36 | 
            +
                      group_index: koji_dates.find_index(date),
         | 
| 37 | 
            +
                      date: date,
         | 
| 38 | 
            +
                      weight: recipe.steps[i].koji,
         | 
| 39 | 
            +
                    )
         | 
| 29 40 | 
             
                  }
         | 
| 41 | 
            +
                end
         | 
| 30 42 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                       | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
                       | 
| 40 | 
            -
                     | 
| 43 | 
            +
                def kake_events
         | 
| 44 | 
            +
                  kake_dates.map.with_index {|date,i|
         | 
| 45 | 
            +
                    RiceEvent.new(
         | 
| 46 | 
            +
                      product: self,
         | 
| 47 | 
            +
                      type: :kake,
         | 
| 48 | 
            +
                      index: i,
         | 
| 49 | 
            +
                      group_index: kake_dates.find_index(date),
         | 
| 50 | 
            +
                      date: date,
         | 
| 51 | 
            +
                      weight: recipe.steps[i].kake,
         | 
| 52 | 
            +
                    )
         | 
| 53 | 
            +
                  }
         | 
| 54 | 
            +
                end
         | 
| 41 55 |  | 
| 42 | 
            -
             | 
| 56 | 
            +
                def rice_events
         | 
| 57 | 
            +
                  koji_events + kake_events
         | 
| 43 58 | 
             
                end
         | 
| 44 59 |  | 
| 45 | 
            -
                def  | 
| 46 | 
            -
                   | 
| 60 | 
            +
                def koji_event_groups
         | 
| 61 | 
            +
                  koji_events.select{|event|
         | 
| 62 | 
            +
                    0<event.weight
         | 
| 63 | 
            +
                  }.group_by{|event|
         | 
| 47 64 | 
             
                    event.group_key
         | 
| 48 65 | 
             
                  }.map {|group_key,events|
         | 
| 49 | 
            -
                     | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
                    if 1<breakdown.length
         | 
| 53 | 
            -
                      breakdown = breakdown.select{|event| 0<event[:weight]}
         | 
| 54 | 
            -
                    end
         | 
| 66 | 
            +
                    RiceEventGroup.new(events)
         | 
| 67 | 
            +
                  }
         | 
| 68 | 
            +
                end
         | 
| 55 69 |  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 70 | 
            +
                def kake_event_groups
         | 
| 71 | 
            +
                  kake_events.select{|event|
         | 
| 72 | 
            +
                    0<event.weight
         | 
| 73 | 
            +
                  }.group_by{|event|
         | 
| 74 | 
            +
                    event.group_key
         | 
| 75 | 
            +
                  }.map {|group_key,events|
         | 
| 76 | 
            +
                    RiceEventGroup.new(events)
         | 
| 62 77 | 
             
                  }
         | 
| 63 78 | 
             
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                def rice_event_groups
         | 
| 81 | 
            +
                  koji_event_groups + kake_event_groups
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                def events
         | 
| 85 | 
            +
                  events = []
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  events += rice_event_groups
         | 
| 88 | 
            +
                  events << Event.new(squeeze_date, :squeeze)
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  events
         | 
| 91 | 
            +
                end
         | 
| 64 92 | 
             
              end
         | 
| 65 93 | 
             
            end
         | 
    
        data/lib/toji/product/event.rb
    CHANGED
    
    | @@ -1,43 +1,12 @@ | |
| 1 1 | 
             
            module Toji
         | 
| 2 2 | 
             
              module Product
         | 
| 3 3 | 
             
                class Event
         | 
| 4 | 
            -
                  attr_reader : | 
| 4 | 
            +
                  attr_reader :date
         | 
| 5 5 | 
             
                  attr_reader :type
         | 
| 6 | 
            -
                  attr_reader :index
         | 
| 7 | 
            -
                  
         | 
| 8 | 
            -
                  def initialize(product, type, index)
         | 
| 9 | 
            -
                    @product = product
         | 
| 10 | 
            -
                    @type = type
         | 
| 11 | 
            -
                    @index = index
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  def date
         | 
| 15 | 
            -
                    method = "#{@type}_dates".to_sym
         | 
| 16 | 
            -
                    @product.send(method)[@index]
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  def group_index
         | 
| 20 | 
            -
                    method = "#{@type}_dates".to_sym
         | 
| 21 | 
            -
                    dates = @product.send(method)
         | 
| 22 | 
            -
                    date = dates[@index]
         | 
| 23 6 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                     | 
| 27 | 
            -
                      dates.index(date)
         | 
| 28 | 
            -
                    end
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  def group_key
         | 
| 32 | 
            -
                    a = []
         | 
| 33 | 
            -
                    a << product.reduce_key
         | 
| 34 | 
            -
                    a << type
         | 
| 35 | 
            -
                    a << group_index
         | 
| 36 | 
            -
                    a.map(&:to_s).join(":")
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  def weight
         | 
| 40 | 
            -
                    @product.recipe.steps[@index].send(@type)
         | 
| 7 | 
            +
                  def initialize(date, type)
         | 
| 8 | 
            +
                    @date = date
         | 
| 9 | 
            +
                    @type = type
         | 
| 41 10 | 
             
                  end
         | 
| 42 11 | 
             
                end
         | 
| 43 12 | 
             
              end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            require 'toji/product/event'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Toji
         | 
| 4 | 
            +
              module Product
         | 
| 5 | 
            +
                class RiceEvent < Event
         | 
| 6 | 
            +
                  attr_reader :product
         | 
| 7 | 
            +
                  attr_reader :index
         | 
| 8 | 
            +
                  attr_reader :group_index
         | 
| 9 | 
            +
                  attr_reader :weight
         | 
| 10 | 
            +
                  
         | 
| 11 | 
            +
                  def initialize(product:, type:, index:, group_index:, date:, weight:)
         | 
| 12 | 
            +
                    super(date, type)
         | 
| 13 | 
            +
                    @product = product
         | 
| 14 | 
            +
                    @index = index
         | 
| 15 | 
            +
                    @group_index = group_index
         | 
| 16 | 
            +
                    @weight = weight
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def group_key
         | 
| 20 | 
            +
                    a = []
         | 
| 21 | 
            +
                    a << product.reduce_key
         | 
| 22 | 
            +
                    a << type
         | 
| 23 | 
            +
                    a << group_index
         | 
| 24 | 
            +
                    a.map(&:to_s).join(":")
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'toji/product/event'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Toji
         | 
| 4 | 
            +
              module Product
         | 
| 5 | 
            +
                class RiceEventGroup < Event
         | 
| 6 | 
            +
                  attr_reader :breakdown
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(events)
         | 
| 9 | 
            +
                    o = events.first
         | 
| 10 | 
            +
                    super(o&.date, o&.type)
         | 
| 11 | 
            +
                    @breakdown = events
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def weight
         | 
| 15 | 
            +
                    @breakdown.map(&:weight).sum
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
    
        data/lib/toji/recipe.rb
    CHANGED
    
    | @@ -1,8 +1,14 @@ | |
| 1 1 | 
             
            require 'toji/recipe/step'
         | 
| 2 | 
            +
            require 'toji/recipe/ab_expect'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Toji
         | 
| 4 5 | 
             
              module Recipe
         | 
| 5 6 | 
             
                attr_accessor :steps
         | 
| 7 | 
            +
                attr_accessor :has_moto
         | 
| 8 | 
            +
                attr_accessor :has_moromi
         | 
| 9 | 
            +
                attr_accessor :ab_coef
         | 
| 10 | 
            +
                attr_accessor :ab_expects
         | 
| 11 | 
            +
                attr_accessor :squeeze_interval_days
         | 
| 6 12 |  | 
| 7 13 | 
             
                def scale(rice_total)
         | 
| 8 14 | 
             
                  rate = rice_total / steps.map(&:rice_total).sum
         | 
| @@ -12,6 +18,11 @@ module Toji | |
| 12 18 |  | 
| 13 19 | 
             
                  self.class.new.tap {|o|
         | 
| 14 20 | 
             
                    o.steps = new_steps
         | 
| 21 | 
            +
                    o.has_moto = has_moto
         | 
| 22 | 
            +
                    o.has_moromi = has_moromi
         | 
| 23 | 
            +
                    o.ab_coef = ab_coef
         | 
| 24 | 
            +
                    o.ab_expects = ab_expects.deep_dup
         | 
| 25 | 
            +
                    o.squeeze_interval_days = squeeze_interval_days
         | 
| 15 26 | 
             
                  }
         | 
| 16 27 | 
             
                end
         | 
| 17 28 |  | 
| @@ -22,6 +33,11 @@ module Toji | |
| 22 33 |  | 
| 23 34 | 
             
                  self.class.new.tap {|o|
         | 
| 24 35 | 
             
                    o.steps = new_steps
         | 
| 36 | 
            +
                    o.has_moto = has_moto
         | 
| 37 | 
            +
                    o.has_moromi = has_moromi
         | 
| 38 | 
            +
                    o.ab_coef = ab_coef
         | 
| 39 | 
            +
                    o.ab_expects = ab_expects.deep_dup
         | 
| 40 | 
            +
                    o.squeeze_interval_days = squeeze_interval_days
         | 
| 25 41 | 
             
                  }
         | 
| 26 42 | 
             
                end
         | 
| 27 43 |  | 
| @@ -35,12 +51,12 @@ module Toji | |
| 35 51 | 
             
                end
         | 
| 36 52 |  | 
| 37 53 | 
             
                # 酒母歩合の累計
         | 
| 38 | 
            -
                def  | 
| 54 | 
            +
                def cumulative_moto_rates
         | 
| 39 55 | 
             
                  rice_total = steps.map(&:rice_total)
         | 
| 40 | 
            -
                   | 
| 56 | 
            +
                  moto = rice_total.first
         | 
| 41 57 |  | 
| 42 58 | 
             
                  rice_total.map.with_index {|x,i|
         | 
| 43 | 
            -
                     | 
| 59 | 
            +
                    moto / rice_total[0..i].inject(&:+)
         | 
| 44 60 | 
             
                  }
         | 
| 45 61 | 
             
                end
         | 
| 46 62 |  | 
| @@ -50,8 +66,8 @@ module Toji | |
| 50 66 | 
             
                # 汲水歩合が大きい高温糖化酒母では6%程度である
         | 
| 51 67 | 
             
                #
         | 
| 52 68 | 
             
                # 出典: 酒造教本 P96
         | 
| 53 | 
            -
                def  | 
| 54 | 
            -
                   | 
| 69 | 
            +
                def moto_rate
         | 
| 70 | 
            +
                  cumulative_moto_rates.last || 0.0
         | 
| 55 71 | 
             
                end
         | 
| 56 72 |  | 
| 57 73 | 
             
                # 白米比率
         | 
    
        data/lib/toji/recipe/step.rb
    CHANGED
    
    | @@ -1,15 +1,21 @@ | |
| 1 1 | 
             
            module Toji
         | 
| 2 2 | 
             
              module Recipe
         | 
| 3 3 | 
             
                module Step
         | 
| 4 | 
            -
                  attr_accessor :name
         | 
| 5 | 
            -
                  attr_accessor :kake
         | 
| 6 4 | 
             
                  attr_accessor :koji
         | 
| 5 | 
            +
                  attr_accessor :koji_soaked_rate
         | 
| 6 | 
            +
                  attr_accessor :koji_steamed_rate
         | 
| 7 | 
            +
                  attr_accessor :koji_dekoji_rate
         | 
| 8 | 
            +
                  attr_accessor :koji_interval_days
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  attr_accessor :kake
         | 
| 11 | 
            +
                  attr_accessor :kake_soaked_rate
         | 
| 12 | 
            +
                  attr_accessor :kake_steamed_rate
         | 
| 13 | 
            +
                  attr_accessor :kake_interval_days
         | 
| 14 | 
            +
             | 
| 7 15 | 
             
                  attr_accessor :water
         | 
| 8 16 | 
             
                  attr_accessor :lactic_acid
         | 
| 9 17 | 
             
                  attr_accessor :alcohol
         | 
| 10 18 | 
             
                  attr_accessor :yeast
         | 
| 11 | 
            -
                  attr_accessor :koji_interval_days
         | 
| 12 | 
            -
                  attr_accessor :kake_interval_days
         | 
| 13 19 |  | 
| 14 20 | 
             
                  # 総米
         | 
| 15 21 | 
             
                  def rice_total
         | 
| @@ -46,30 +52,42 @@ module Toji | |
| 46 52 | 
             
                    end
         | 
| 47 53 |  | 
| 48 54 | 
             
                    self.class.new.tap {|o|
         | 
| 49 | 
            -
                      o.name = name
         | 
| 50 | 
            -
                      o.kake = kake.to_f.round(ndigit, half: half)
         | 
| 51 55 | 
             
                      o.koji = koji.to_f.round(ndigit, half: half)
         | 
| 56 | 
            +
                      o.koji_soaked_rate = koji_soaked_rate.to_f
         | 
| 57 | 
            +
                      o.koji_steamed_rate = koji_steamed_rate.to_f
         | 
| 58 | 
            +
                      o.koji_dekoji_rate = koji_dekoji_rate.to_f
         | 
| 59 | 
            +
                      o.koji_interval_days = koji_interval_days.to_i
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                      o.kake = kake.to_f.round(ndigit, half: half)
         | 
| 62 | 
            +
                      o.kake_soaked_rate = kake_soaked_rate.to_f
         | 
| 63 | 
            +
                      o.kake_steamed_rate = kake_steamed_rate.to_f
         | 
| 64 | 
            +
                      o.kake_interval_days = kake_interval_days.to_i
         | 
| 65 | 
            +
             | 
| 52 66 | 
             
                      o.water = water.to_f.round(ndigit, half: half)
         | 
| 53 67 | 
             
                      o.lactic_acid = lactic_acid.to_f.round(mini_ndigit, half: half)
         | 
| 54 68 | 
             
                      o.alcohol = alcohol.to_f.round(ndigit, half: half)
         | 
| 55 69 | 
             
                      o.yeast = yeast.to_f.round(mini_ndigit, half: half)
         | 
| 56 | 
            -
                      o.koji_interval_days = koji_interval_days.to_i
         | 
| 57 | 
            -
                      o.kake_interval_days = kake_interval_days.to_i
         | 
| 58 70 | 
             
                    }
         | 
| 59 71 | 
             
                  end
         | 
| 60 72 |  | 
| 61 73 | 
             
                  def +(other)
         | 
| 62 74 | 
             
                    if Step===other
         | 
| 63 75 | 
             
                      self.class.new.tap {|o|
         | 
| 64 | 
            -
                        o.name = name
         | 
| 65 | 
            -
                        o.kake = kake.to_f + other.kake.to_f
         | 
| 66 76 | 
             
                        o.koji = koji.to_f + other.koji.to_f
         | 
| 77 | 
            +
                        o.koji_soaked_rate = koji_soaked_rate.to_f
         | 
| 78 | 
            +
                        o.koji_steamed_rate = koji_steamed_rate.to_f
         | 
| 79 | 
            +
                        o.koji_dekoji_rate = koji_dekoji_rate.to_f
         | 
| 80 | 
            +
                        o.koji_interval_days = koji_interval_days.to_i
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                        o.kake = kake.to_f + other.kake.to_f
         | 
| 83 | 
            +
                        o.kake_soaked_rate = kake_soaked_rate.to_f
         | 
| 84 | 
            +
                        o.kake_steamed_rate = kake_steamed_rate.to_f
         | 
| 85 | 
            +
                        o.kake_interval_days = kake_interval_days.to_i
         | 
| 86 | 
            +
             | 
| 67 87 | 
             
                        o.water = water.to_f + other.water.to_f
         | 
| 68 88 | 
             
                        o.lactic_acid = lactic_acid.to_f + other.lactic_acid.to_f
         | 
| 69 89 | 
             
                        o.alcohol = alcohol.to_f + other.alcohol.to_f
         | 
| 70 90 | 
             
                        o.yeast = yeast.to_f + other.yeast.to_f
         | 
| 71 | 
            -
                        o.koji_interval_days = koji_interval_days.to_i
         | 
| 72 | 
            -
                        o.kake_interval_days = kake_interval_days.to_i
         | 
| 73 91 | 
             
                      }
         | 
| 74 92 | 
             
                    else
         | 
| 75 93 | 
             
                      x, y = other.coerce(self)
         | 
| @@ -80,15 +98,21 @@ module Toji | |
| 80 98 | 
             
                  def *(other)
         | 
| 81 99 | 
             
                    if Integer===other || Float===other
         | 
| 82 100 | 
             
                      self.class.new.tap {|o|
         | 
| 83 | 
            -
                        o.name = name
         | 
| 84 | 
            -
                        o.kake = kake.to_f * other
         | 
| 85 101 | 
             
                        o.koji = koji.to_f * other
         | 
| 102 | 
            +
                        o.koji_soaked_rate = koji_soaked_rate.to_f
         | 
| 103 | 
            +
                        o.koji_steamed_rate = koji_steamed_rate.to_f
         | 
| 104 | 
            +
                        o.koji_dekoji_rate = koji_dekoji_rate.to_f
         | 
| 105 | 
            +
                        o.koji_interval_days = koji_interval_days.to_i
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                        o.kake = kake.to_f * other
         | 
| 108 | 
            +
                        o.kake_soaked_rate = kake_soaked_rate.to_f
         | 
| 109 | 
            +
                        o.kake_steamed_rate = kake_steamed_rate.to_f
         | 
| 110 | 
            +
                        o.kake_interval_days = kake_interval_days.to_i
         | 
| 111 | 
            +
             | 
| 86 112 | 
             
                        o.water = water.to_f * other
         | 
| 87 113 | 
             
                        o.lactic_acid = lactic_acid.to_f * other
         | 
| 88 114 | 
             
                        o.alcohol = alcohol.to_f * other
         | 
| 89 115 | 
             
                        o.yeast = yeast.to_f * other
         | 
| 90 | 
            -
                        o.koji_interval_days = koji_interval_days.to_i
         | 
| 91 | 
            -
                        o.kake_interval_days = kake_interval_days.to_i
         | 
| 92 116 | 
             
                      }
         | 
| 93 117 | 
             
                    else
         | 
| 94 118 | 
             
                      x, y = other.coerce(self)
         | 
    
        data/lib/toji/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: toji
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.8.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yoshida Tetsuya
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-06 | 
| 11 | 
            +
            date: 2020-09-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -122,10 +122,9 @@ files: | |
| 122 122 | 
             
            - example/moromi.ipynb
         | 
| 123 123 | 
             
            - example/moromi.rb
         | 
| 124 124 | 
             
            - example/moromi.yaml
         | 
| 125 | 
            +
            - example/moto.rb
         | 
| 126 | 
            +
            - example/moto.yaml
         | 
| 125 127 | 
             
            - example/recipe.rb
         | 
| 126 | 
            -
            - example/shubo.ipynb
         | 
| 127 | 
            -
            - example/shubo.rb
         | 
| 128 | 
            -
            - example/shubo.yaml
         | 
| 129 128 | 
             
            - lib/toji.rb
         | 
| 130 129 | 
             
            - lib/toji/brew.rb
         | 
| 131 130 | 
             
            - lib/toji/brew/base.rb
         | 
| @@ -137,7 +136,7 @@ files: | |
| 137 136 | 
             
            - lib/toji/brew/graph/progress.rb
         | 
| 138 137 | 
             
            - lib/toji/brew/koji.rb
         | 
| 139 138 | 
             
            - lib/toji/brew/moromi.rb
         | 
| 140 | 
            -
            - lib/toji/brew/ | 
| 139 | 
            +
            - lib/toji/brew/moto.rb
         | 
| 141 140 | 
             
            - lib/toji/brew/state.rb
         | 
| 142 141 | 
             
            - lib/toji/brew/wrapped_state.rb
         | 
| 143 142 | 
             
            - lib/toji/calendar.rb
         | 
| @@ -162,7 +161,10 @@ files: | |
| 162 161 | 
             
            - lib/toji/ingredient/rice_rate.rb
         | 
| 163 162 | 
             
            - lib/toji/product.rb
         | 
| 164 163 | 
             
            - lib/toji/product/event.rb
         | 
| 164 | 
            +
            - lib/toji/product/rice_event.rb
         | 
| 165 | 
            +
            - lib/toji/product/rice_event_group.rb
         | 
| 165 166 | 
             
            - lib/toji/recipe.rb
         | 
| 167 | 
            +
            - lib/toji/recipe/ab_expect.rb
         | 
| 166 168 | 
             
            - lib/toji/recipe/step.rb
         | 
| 167 169 | 
             
            - lib/toji/version.rb
         | 
| 168 170 | 
             
            - toji.gemspec
         | 
    
        data/example/shubo.ipynb
    DELETED
    
    | @@ -1,121 +0,0 @@ | |
| 1 | 
            -
            {
         | 
| 2 | 
            -
             "cells": [
         | 
| 3 | 
            -
              {
         | 
| 4 | 
            -
               "cell_type": "code",
         | 
| 5 | 
            -
               "execution_count": 1,
         | 
| 6 | 
            -
               "metadata": {},
         | 
| 7 | 
            -
               "outputs": [
         | 
| 8 | 
            -
                {
         | 
| 9 | 
            -
                 "data": {
         | 
| 10 | 
            -
                  "text/html": [
         | 
| 11 | 
            -
                   "\n",
         | 
| 12 | 
            -
                   "  <script>\n",
         | 
| 13 | 
            -
                   "  requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
         | 
| 14 | 
            -
                   "  </script>\n",
         | 
| 15 | 
            -
                   "\n",
         | 
| 16 | 
            -
                   "\n",
         | 
| 17 | 
            -
                   "<div id=\"105867eb-e572-490c-8509-e506179e76ad\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 18 | 
            -
                   "\n",
         | 
| 19 | 
            -
                   "<script>\n",
         | 
| 20 | 
            -
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 21 | 
            -
                   "Plotly.newPlot(\n",
         | 
| 22 | 
            -
                   "  '105867eb-e572-490c-8509-e506179e76ad',\n",
         | 
| 23 | 
            -
                   "  [{\"x\":[0.0,3600.0,86400.0,172800.0,172801.0,259200.0,259201.0,345600.0,345601.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0],\"y\":[12.0,20.0,14.0,8.0,11.0,10.0,13.0,12.0,15.0,14.0,20.0,20.0,20.0,20.0,15.0,12.0,10.0,9.0],\"text\":[\"01/16 00:00\",\"01/16 01:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\"],\"name\":\"temps\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#1f77b4\"}},{\"x\":[86400.0,172800.0,259200.0,345600.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0],\"y\":[15.0,16.0,16.5,17.0,17.0,17.0,14.0,12.0,9.0,8.0,7.0,6.0,5.0],\"text\":[\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\"],\"name\":\"baume\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#9467bd\"}},{\"x\":[0.0,3600.0,86400.0,172800.0,259200.0,345600.0,432000.0,518400.0,604800.0,691200.0,777600.0,864000.0,950400.0,1036800.0,1123200.0],\"y\":[13.0,13.0,13.0,13.0,13.5,13.5,14.0,14.5,15.5,16.0,16.0,16.5,17.0,17.5,17.5],\"text\":[\"01/16 00:00\",\"01/16 01:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\"],\"name\":\"acid\",\"line\":{\"dash\":\"solid\",\"shape\":\"linear\"},\"marker\":{\"color\":\"#8c564b\"}}],\n",
         | 
| 24 | 
            -
                   "  {\"xaxis\":{\"dtick\":86400,\"tickvals\":[0,86400,172800,259200,345600,432000,518400,604800,691200,777600,864000,950400,1036800,1123200],\"ticktext\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\"]},\"annotations\":[{\"x\":0.0,\"y\":12.0,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"水麹\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40},{\"x\":3600.0,\"y\":20.0,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"仕込み\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40},{\"x\":86400.0,\"y\":14.0,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"打瀬\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40},{\"x\":777600.0,\"y\":20.0,\"xref\":\"x\",\"yref\":\"y\",\"text\":\"分け\",\"showarrow\":true,\"arrowhead\":1,\"ax\":0,\"ay\":-40}]},\n",
         | 
| 25 | 
            -
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 26 | 
            -
                   ")\n",
         | 
| 27 | 
            -
                   "\n",
         | 
| 28 | 
            -
                   "window.addEventListener('resize', function() {\n",
         | 
| 29 | 
            -
                   "  Plotly.Plots.resize(document.getElementById('105867eb-e572-490c-8509-e506179e76ad'))\n",
         | 
| 30 | 
            -
                   "})\n",
         | 
| 31 | 
            -
                   " }) \n",
         | 
| 32 | 
            -
                   "</script>"
         | 
| 33 | 
            -
                  ],
         | 
| 34 | 
            -
                  "text/plain": [
         | 
| 35 | 
            -
                   "#<Plotly::Offline::HTML:0x00007f983ea69c48 @id=\"105867eb-e572-490c-8509-e506179e76ad\", @data=[{:x=>[0.0, 3600.0, 86400.0, 172800.0, 172801.0, 259200.0, 259201.0, 345600.0, 345601.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0], :y=>[12.0, 20.0, 14.0, 8.0, 11.0, 10.0, 13.0, 12.0, 15.0, 14.0, 20.0, 20.0, 20.0, 20.0, 15.0, 12.0, 10.0, 9.0], :text=>[\"01/16 00:00\", \"01/16 01:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\"], :name=>\"temps\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#1f77b4\"}}, {:x=>[86400.0, 172800.0, 259200.0, 345600.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0], :y=>[15.0, 16.0, 16.5, 17.0, 17.0, 17.0, 14.0, 12.0, 9.0, 8.0, 7.0, 6.0, 5.0], :text=>[\"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\"], :name=>\"baume\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#9467bd\"}}, {:x=>[0.0, 3600.0, 86400.0, 172800.0, 259200.0, 345600.0, 432000.0, 518400.0, 604800.0, 691200.0, 777600.0, 864000.0, 950400.0, 1036800.0, 1123200.0], :y=>[13.0, 13.0, 13.0, 13.0, 13.5, 13.5, 14.0, 14.5, 15.5, 16.0, 16.0, 16.5, 17.0, 17.5, 17.5], :text=>[\"01/16 00:00\", \"01/16 01:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\"], :name=>\"acid\", :line=>{:dash=>:solid, :shape=>:linear}, :marker=>{:color=>\"#8c564b\"}}], @layout={:xaxis=>{:dtick=>86400, :tickvals=>[0, 86400, 172800, 259200, 345600, 432000, 518400, 604800, 691200, 777600, 864000, 950400, 1036800, 1123200], :ticktext=>[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\", \"13\", \"14\"]}, :annotations=>[{:x=>0.0, :y=>12.0, :xref=>\"x\", :yref=>\"y\", :text=>\"水麹\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}, {:x=>3600.0, :y=>20.0, :xref=>\"x\", :yref=>\"y\", :text=>\"仕込み\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}, {:x=>86400.0, :y=>14.0, :xref=>\"x\", :yref=>\"y\", :text=>\"打瀬\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}, {:x=>777600.0, :y=>20.0, :xref=>\"x\", :yref=>\"y\", :text=>\"分け\", :showarrow=>true, :arrowhead=>1, :ax=>0, :ay=>-40}]}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 36 | 
            -
                  ]
         | 
| 37 | 
            -
                 },
         | 
| 38 | 
            -
                 "metadata": {},
         | 
| 39 | 
            -
                 "output_type": "display_data"
         | 
| 40 | 
            -
                },
         | 
| 41 | 
            -
                {
         | 
| 42 | 
            -
                 "data": {
         | 
| 43 | 
            -
                  "text/html": [
         | 
| 44 | 
            -
                   "\n",
         | 
| 45 | 
            -
                   "  <script>\n",
         | 
| 46 | 
            -
                   "  requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
         | 
| 47 | 
            -
                   "  </script>\n",
         | 
| 48 | 
            -
                   "\n",
         | 
| 49 | 
            -
                   "\n",
         | 
| 50 | 
            -
                   "<div id=\"23560ab9-b0dc-4006-9779-b9219ab608c6\" style=\"height: 100%; width: 100%;\"></div>\n",
         | 
| 51 | 
            -
                   "\n",
         | 
| 52 | 
            -
                   "<script>\n",
         | 
| 53 | 
            -
                   " require(['plotly'], function(Plotly) { \n",
         | 
| 54 | 
            -
                   "Plotly.newPlot(\n",
         | 
| 55 | 
            -
                   "  '23560ab9-b0dc-4006-9779-b9219ab608c6',\n",
         | 
| 56 | 
            -
                   "  [{\"type\":\"table\",\"header\":{\"values\":[\"day_label\",\"display_time\",\"mark\",\"temps\",\"display_baume\",\"acid\",\"warmings\"]},\"cells\":{\"values\":[[\"1\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\"],[\"01/16 00:00\",\"01/16 01:00\",\"01/17 00:00\",\"01/18 00:00\",\"01/19 00:00\",\"01/20 00:00\",\"01/21 00:00\",\"01/22 00:00\",\"01/23 00:00\",\"01/24 00:00\",\"01/25 00:00\",\"01/26 00:00\",\"01/27 00:00\",\"01/28 00:00\",\"01/29 00:00\"],[\"水麹\",\"仕込み\",\"打瀬\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"分け\",\"\",\"\",\"\",\"\"],[\"12.0\",\"20.0\",\"14.0\",\"8.0, 11.0\",\"10.0, 13.0\",\"12.0, 15.0\",\"14.0\",\"20.0\",\"20.0\",\"20.0\",\"20.0\",\"15.0\",\"12.0\",\"10.0\",\"9.0\"],[\"\",\"\",15.0,16.0,16.5,17.0,17.0,17.0,14.0,12.0,9.0,8.0,7.0,6.0,5.0],[13.0,13.0,13.0,13.0,13.5,13.5,14.0,14.5,15.5,16.0,16.0,16.5,17.0,17.5,17.5],[\"\",\"\",\"\",\"暖気\",\"暖気\",\"暖気\",\"行火\",\"行火\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]]}}],\n",
         | 
| 57 | 
            -
                   "  {\"height\":650},\n",
         | 
| 58 | 
            -
                   "  {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
         | 
| 59 | 
            -
                   ")\n",
         | 
| 60 | 
            -
                   "\n",
         | 
| 61 | 
            -
                   "window.addEventListener('resize', function() {\n",
         | 
| 62 | 
            -
                   "  Plotly.Plots.resize(document.getElementById('23560ab9-b0dc-4006-9779-b9219ab608c6'))\n",
         | 
| 63 | 
            -
                   "})\n",
         | 
| 64 | 
            -
                   " }) \n",
         | 
| 65 | 
            -
                   "</script>"
         | 
| 66 | 
            -
                  ],
         | 
| 67 | 
            -
                  "text/plain": [
         | 
| 68 | 
            -
                   "#<Plotly::Offline::HTML:0x00007f9841041718 @id=\"23560ab9-b0dc-4006-9779-b9219ab608c6\", @data=[{:type=>:table, :header=>{:values=>[:day_label, :display_time, :mark, :temps, :display_baume, :acid, :warmings]}, :cells=>{:values=>[[\"1\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\", \"13\", \"14\"], [\"01/16 00:00\", \"01/16 01:00\", \"01/17 00:00\", \"01/18 00:00\", \"01/19 00:00\", \"01/20 00:00\", \"01/21 00:00\", \"01/22 00:00\", \"01/23 00:00\", \"01/24 00:00\", \"01/25 00:00\", \"01/26 00:00\", \"01/27 00:00\", \"01/28 00:00\", \"01/29 00:00\"], [\"水麹\", \"仕込み\", \"打瀬\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"分け\", \"\", \"\", \"\", \"\"], [\"12.0\", \"20.0\", \"14.0\", \"8.0, 11.0\", \"10.0, 13.0\", \"12.0, 15.0\", \"14.0\", \"20.0\", \"20.0\", \"20.0\", \"20.0\", \"15.0\", \"12.0\", \"10.0\", \"9.0\"], [\"\", \"\", 15.0, 16.0, 16.5, 17.0, 17.0, 17.0, 14.0, 12.0, 9.0, 8.0, 7.0, 6.0, 5.0], [13.0, 13.0, 13.0, 13.0, 13.5, 13.5, 14.0, 14.5, 15.5, 16.0, 16.0, 16.5, 17.0, 17.5, 17.5], [\"\", \"\", \"\", \"暖気\", \"暖気\", \"暖気\", \"行火\", \"行火\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"]]}}], @layout={:height=>650}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
         | 
| 69 | 
            -
                  ]
         | 
| 70 | 
            -
                 },
         | 
| 71 | 
            -
                 "metadata": {},
         | 
| 72 | 
            -
                 "output_type": "display_data"
         | 
| 73 | 
            -
                },
         | 
| 74 | 
            -
                {
         | 
| 75 | 
            -
                 "data": {
         | 
| 76 | 
            -
                  "text/plain": [
         | 
| 77 | 
            -
                   "#<CZTop::Socket::PUB:0x7f984321b6b0 last_endpoint=\"tcp://127.0.0.1:56600\">"
         | 
| 78 | 
            -
                  ]
         | 
| 79 | 
            -
                 },
         | 
| 80 | 
            -
                 "execution_count": 1,
         | 
| 81 | 
            -
                 "metadata": {},
         | 
| 82 | 
            -
                 "output_type": "execute_result"
         | 
| 83 | 
            -
                }
         | 
| 84 | 
            -
               ],
         | 
| 85 | 
            -
               "source": [
         | 
| 86 | 
            -
                "$LOAD_PATH << File.dirname(__FILE__) + \"/../lib\"\n",
         | 
| 87 | 
            -
                "require 'toji'\n",
         | 
| 88 | 
            -
                "require './example_core'\n",
         | 
| 89 | 
            -
                "require 'rbplotly'\n",
         | 
| 90 | 
            -
                "\n",
         | 
| 91 | 
            -
                "shubo = Example::Brew::Shubo.load_yaml_file(\"shubo.yaml\")\n",
         | 
| 92 | 
            -
                "shubo.progress.plot.show\n",
         | 
| 93 | 
            -
                "shubo.progress.table.tap {|t|\n",
         | 
| 94 | 
            -
                "  t.layout.height = 650\n",
         | 
| 95 | 
            -
                "}.show"
         | 
| 96 | 
            -
               ]
         | 
| 97 | 
            -
              },
         | 
| 98 | 
            -
              {
         | 
| 99 | 
            -
               "cell_type": "code",
         | 
| 100 | 
            -
               "execution_count": null,
         | 
| 101 | 
            -
               "metadata": {},
         | 
| 102 | 
            -
               "outputs": [],
         | 
| 103 | 
            -
               "source": []
         | 
| 104 | 
            -
              }
         | 
| 105 | 
            -
             ],
         | 
| 106 | 
            -
             "metadata": {
         | 
| 107 | 
            -
              "kernelspec": {
         | 
| 108 | 
            -
               "display_name": "Ruby 2.7.1",
         | 
| 109 | 
            -
               "language": "ruby",
         | 
| 110 | 
            -
               "name": "ruby"
         | 
| 111 | 
            -
              },
         | 
| 112 | 
            -
              "language_info": {
         | 
| 113 | 
            -
               "file_extension": ".rb",
         | 
| 114 | 
            -
               "mimetype": "application/x-ruby",
         | 
| 115 | 
            -
               "name": "ruby",
         | 
| 116 | 
            -
               "version": "2.6.3"
         | 
| 117 | 
            -
              }
         | 
| 118 | 
            -
             },
         | 
| 119 | 
            -
             "nbformat": 4,
         | 
| 120 | 
            -
             "nbformat_minor": 2
         | 
| 121 | 
            -
            }
         |