In [1]:
%pip install dash dash-core-components dash-html-components
Requirement already satisfied: dash in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (3.0.4)
Collecting dash-core-components
  Using cached dash_core_components-2.0.0-py3-none-any.whl.metadata (2.9 kB)
Requirement already satisfied: dash-html-components in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (2.0.0)
Requirement already satisfied: Flask<3.1,>=1.0.4 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (3.0.3)
Requirement already satisfied: Werkzeug<3.1 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (3.0.6)
Requirement already satisfied: plotly>=5.0.0 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (6.1.2)
Requirement already satisfied: importlib-metadata in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (8.7.0)
Requirement already satisfied: typing-extensions>=4.1.1 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (4.14.0)
Requirement already satisfied: requests in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (2.32.4)
Requirement already satisfied: retrying in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (1.3.4)
Requirement already satisfied: nest-asyncio in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (1.6.0)
Requirement already satisfied: setuptools in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from dash) (80.9.0)
Requirement already satisfied: Jinja2>=3.1.2 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash) (3.1.6)
Requirement already satisfied: itsdangerous>=2.1.2 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash) (2.2.0)
Requirement already satisfied: click>=8.1.3 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash) (8.2.1)
Requirement already satisfied: blinker>=1.6.2 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash) (1.9.0)
Requirement already satisfied: MarkupSafe>=2.1.1 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from Werkzeug<3.1->dash) (3.0.2)
Requirement already satisfied: narwhals>=1.15.1 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from plotly>=5.0.0->dash) (1.42.1)
Requirement already satisfied: packaging in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from plotly>=5.0.0->dash) (25.0)
Requirement already satisfied: zipp>=3.20 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from importlib-metadata->dash) (3.23.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from requests->dash) (3.4.2)
Requirement already satisfied: idna<4,>=2.5 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from requests->dash) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from requests->dash) (2.4.0)
Requirement already satisfied: certifi>=2017.4.17 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from requests->dash) (2025.4.26)
Requirement already satisfied: six>=1.7.0 in /home/robbiec/Git/pfun-cma-model/.venv/lib/python3.12/site-packages (from retrying->dash) (1.17.0)
Using cached dash_core_components-2.0.0-py3-none-any.whl (3.8 kB)
Installing collected packages: dash-core-components
Successfully installed dash-core-components-2.0.0
Note: you may need to restart the kernel to use updated packages.

CMA Model Tuning¶

In [2]:
import pfun_cma_model as pfun

# Load sample data
data = pfun.PFunDataPaths().read_sample_data()

# Fit the model
pfun.fit_model(data)

# Visualize the results
# TODO ...
Out[2]:
CMAFitResult(soln=                                   t         c         m         a       I_S  \
0 days 00:00:00             0.000000  0.075597  0.854758  0.251604  0.153497   
0 days 00:01:24.457478005   0.023460  0.074229  0.856916  0.251662  0.151719   
0 days 00:02:48.914956010   0.046921  0.072885  0.859060  0.251722  0.149949   
0 days 00:04:13.372434019   0.070381  0.071566  0.861190  0.251783  0.148186   
0 days 00:05:37.829912024   0.093842  0.070270  0.863307  0.251845  0.146430   
...                              ...       ...       ...       ...       ...   
0 days 23:54:22.170087975  23.906158  0.019881  0.845996  0.250010  0.174811   
0 days 23:55:46.627565980  23.929619  0.019499  0.848206  0.250009  0.172755   
0 days 23:57:11.085043989  23.953079  0.019123  0.850404  0.250008  0.170710   
0 days 23:58:35.542521994  23.976540  0.018754  0.852588  0.250008  0.168677   
1 days 00:00:00            24.000000  0.018392  0.854758  0.250007  0.166654   

                                I_E             L       g_0       g_1  \
0 days 00:00:00            0.038620  1.517875e-08  0.311846  0.311846   
0 days 00:01:24.457478005  0.038182  1.756372e-08  0.311846  0.311846   
0 days 00:02:48.914956010  0.037745  2.030605e-08  0.311846  0.311846   
0 days 00:04:13.372434019  0.037311  2.345654e-08  0.311846  0.311846   
0 days 00:05:37.829912024  0.036878  2.707282e-08  0.311846  0.311846   
...                             ...           ...       ...       ...   
0 days 23:54:22.170087975  0.043704  2.308257e-08  0.311846  0.311846   
0 days 23:55:46.627565980  0.043190  1.998041e-08  0.311846  0.311846   
0 days 23:57:11.085043989  0.042679  1.728041e-08  0.311846  0.311846   
0 days 23:58:35.542521994  0.042170  1.493248e-08  0.311846  0.311846   
1 days 00:00:00            0.041665  1.289247e-08  0.311846  0.311846   

                                g_2       g_3         G  is_meal  
0 days 00:00:00            0.311846  0.311846  1.247385    False  
0 days 00:01:24.457478005  0.311846  0.311846  1.247385    False  
0 days 00:02:48.914956010  0.311846  0.311846  1.247385    False  
0 days 00:04:13.372434019  0.311846  0.311846  1.247385    False  
0 days 00:05:37.829912024  0.311846  0.311846  1.247385    False  
...                             ...       ...       ...      ...  
0 days 23:54:22.170087975  0.311846  0.311846  1.247385    False  
0 days 23:55:46.627565980  0.311846  0.311846  1.247385    False  
0 days 23:57:11.085043989  0.311846  0.311846  1.247385    False  
0 days 23:58:35.542521994  0.311846  0.311846  1.247385    False  
1 days 00:00:00            0.311846  0.311846  1.247385    False  

[1024 rows x 13 columns], formatted_data=                                         time       value        tod  \
t                                                                      
0.097361  2021-01-24 23:58:24.337242924+00:00  126.000000   0.097500   
0.136667  2021-01-21 00:01:18.484848280+00:00  113.666667   0.136852   
0.138333  2021-01-24 00:02:36.969696560+00:00  123.333333   0.138519   
0.181806  2021-01-27 00:03:55.454544840+00:00  132.000000   0.181944   
0.220000  2021-01-20 00:05:31.117301916+00:00  120.333333   0.220093   
...                                       ...         ...        ...   
23.804259 2021-01-21 23:43:09.470185456+00:00  126.333333  23.804444   
23.806574 2021-01-25 23:40:15.322580100+00:00  126.000000  23.806574   
23.886574 2021-01-20 23:47:22.102639092+00:00  115.333333  23.886667   
23.889074 2021-01-24 23:44:27.955033736+00:00  123.333333  23.889167   
23.930000 2021-01-23 23:48:40.587487372+00:00  117.500000  23.930139   

                   t         G  
t                               
0.097361    0.097361  1.362543  
0.136667    0.136667  1.105691  
0.138333    0.138333  1.293078  
0.181806    0.181806  1.540046  
0.220000    0.220000  1.224470  
...              ...       ...  
23.804259  23.804259  1.376253  
23.806574  23.806574  1.362543  
23.886574  23.886574  1.130516  
23.889074  23.889074  1.293078  
23.930000  23.930000  1.167496  

[1024 rows x 5 columns], cma=<pfun_cma_model.engine.cma.CMASleepWakeModel object at 0x7f05c63cfa10>, popt=array([-1.30407158e-02,  1.17487785e+00, -8.79689646e-03,  1.55923109e-01,
        1.96784610e-09,  0.00000000e+00]), pcov=array([[ 1.84434284e+00, -1.11679301e+01,  6.41788775e+01,
        -7.40825896e-01,  8.87783912e-01,  0.00000000e+00],
       [-1.11679301e+01,  1.48715665e+02, -8.48879542e+02,
         9.79873182e+00, -1.17424226e+01,  0.00000000e+00],
       [ 6.41788775e+01, -8.48879542e+02,  4.87927048e+03,
        -5.63219569e+01,  6.74926632e+01,  0.00000000e+00],
       [-7.40825896e-01,  9.79873182e+00, -5.63219569e+01,
         6.51156372e-01, -7.81072971e-01,  0.00000000e+00],
       [ 8.87783912e-01, -1.17424226e+01,  6.74926632e+01,
        -7.81072971e-01,  9.41569785e-01,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  0.00000000e+00,  1.00000000e+00]]), infodict={'message': 'Optimization terminated successfully.', 'error': None, 'ier': 0, 'result':   message: CONVERGENCE: RELATIVE REDUCTION OF F <= FACTR*EPSMCH
  success: True
   status: 0
      fun: 78.24510432625571
        x: [-1.304e-02  1.175e+00 -8.797e-03  1.559e-01  1.968e-09
             0.000e+00]
      nit: 20
      jac: [ 0.000e+00  0.000e+00  0.000e+00  6.168e-04  2.416e-05
             0.000e+00]
     nfev: 308
     njev: 44
 hess_inv: <6x6 LbfgsInvHessProduct with dtype=float64>}, mesg='Optimization terminated successfully.', ier=0, popt_named={'d': np.float64(-0.013040715801225806), 'taup': np.float64(1.1748778461821738), 'taug': np.float64(-0.00879689646450262), 'B': np.float64(0.1559231093783914), 'Cm': np.float64(1.9678460960653582e-09), 'toff': np.float64(0.0)}, cond=np.float64(10213028.026154377), diag=array([1.84434284e+00, 1.48715665e+02, 4.87927048e+03, 6.51156372e-01,
       9.41569785e-01, 1.00000000e+00]))
In [ ]:
%%sh

uv run jupyter nbconvert --to html cma-model-tuning.ipynb --output cma-model-tuning.html
cp cma-model-tuning.html ../../pfun_cma_model/static/notebooks/cma-model-tuning.html
In [ ]: