modelflowib 2.78__tar.gz → 2.79__tar.gz

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.
Files changed (50) hide show
  1. {modelflowib-2.78 → modelflowib-2.79}/PKG-INFO +1 -1
  2. {modelflowib-2.78 → modelflowib-2.79}/model_parquet_mixin.py +20 -8
  3. {modelflowib-2.78 → modelflowib-2.79}/modelclass.py +522 -51
  4. {modelflowib-2.78 → modelflowib-2.79}/modelconstruct_estimation.py +18 -14
  5. {modelflowib-2.78 → modelflowib-2.79}/modeldashsidebar.py +20 -9
  6. {modelflowib-2.78 → modelflowib-2.79}/modelestimator_new.py +117 -31
  7. {modelflowib-2.78 → modelflowib-2.79}/modelflowib.egg-info/PKG-INFO +1 -1
  8. {modelflowib-2.78 → modelflowib-2.79}/modelhelp.py +48 -2
  9. {modelflowib-2.78 → modelflowib-2.79}/modeljupytermagic.py +68 -5
  10. {modelflowib-2.78 → modelflowib-2.79}/modelsolver_ng.py +4 -2
  11. {modelflowib-2.78 → modelflowib-2.79}/pyproject.toml +1 -1
  12. {modelflowib-2.78 → modelflowib-2.79}/README.md +0 -0
  13. {modelflowib-2.78 → modelflowib-2.79}/license.md +0 -0
  14. {modelflowib-2.78 → modelflowib-2.79}/modelBLfunk.py +0 -0
  15. {modelflowib-2.78 → modelflowib-2.79}/model_Excel.py +0 -0
  16. {modelflowib-2.78 → modelflowib-2.79}/model_cvx.py +0 -0
  17. {modelflowib-2.78 → modelflowib-2.79}/model_dynare.py +0 -0
  18. {modelflowib-2.78 → modelflowib-2.79}/model_financial_stability.py +0 -0
  19. {modelflowib-2.78 → modelflowib-2.79}/model_latex.py +0 -0
  20. {modelflowib-2.78 → modelflowib-2.79}/model_latex_class.py +0 -0
  21. {modelflowib-2.78 → modelflowib-2.79}/modelconstruct.py +0 -0
  22. {modelflowib-2.78 → modelflowib-2.79}/modeldash.py +0 -0
  23. {modelflowib-2.78 → modelflowib-2.79}/modeldashboot.py +0 -0
  24. {modelflowib-2.78 → modelflowib-2.79}/modeldekom.py +0 -0
  25. {modelflowib-2.78 → modelflowib-2.79}/modeldiff.py +0 -0
  26. {modelflowib-2.78 → modelflowib-2.79}/modeldisplay.py +0 -0
  27. {modelflowib-2.78 → modelflowib-2.79}/modelestimation.py +0 -0
  28. {modelflowib-2.78 → modelflowib-2.79}/modelflowib.egg-info/SOURCES.txt +0 -0
  29. {modelflowib-2.78 → modelflowib-2.79}/modelflowib.egg-info/dependency_links.txt +0 -0
  30. {modelflowib-2.78 → modelflowib-2.79}/modelflowib.egg-info/requires.txt +0 -0
  31. {modelflowib-2.78 → modelflowib-2.79}/modelflowib.egg-info/top_level.txt +0 -0
  32. {modelflowib-2.78 → modelflowib-2.79}/modelgrab.py +0 -0
  33. {modelflowib-2.78 → modelflowib-2.79}/modelgrabgdx.py +0 -0
  34. {modelflowib-2.78 → modelflowib-2.79}/modelgrabwf2.py +0 -0
  35. {modelflowib-2.78 → modelflowib-2.79}/modelhtml.py +0 -0
  36. {modelflowib-2.78 → modelflowib-2.79}/modelinvert.py +0 -0
  37. {modelflowib-2.78 → modelflowib-2.79}/modeljupyter.py +0 -0
  38. {modelflowib-2.78 → modelflowib-2.79}/modelmacrograb.py +0 -0
  39. {modelflowib-2.78 → modelflowib-2.79}/modelmanipulation.py +0 -0
  40. {modelflowib-2.78 → modelflowib-2.79}/modelmf.py +0 -0
  41. {modelflowib-2.78 → modelflowib-2.79}/modelnet.py +0 -0
  42. {modelflowib-2.78 → modelflowib-2.79}/modelnewton.py +0 -0
  43. {modelflowib-2.78 → modelflowib-2.79}/modelnormalize.py +0 -0
  44. {modelflowib-2.78 → modelflowib-2.79}/modelpattern.py +0 -0
  45. {modelflowib-2.78 → modelflowib-2.79}/modelreport.py +0 -0
  46. {modelflowib-2.78 → modelflowib-2.79}/modeluserfunk.py +0 -0
  47. {modelflowib-2.78 → modelflowib-2.79}/modelvis.py +0 -0
  48. {modelflowib-2.78 → modelflowib-2.79}/modelwidget.py +0 -0
  49. {modelflowib-2.78 → modelflowib-2.79}/modelwidget_input.py +0 -0
  50. {modelflowib-2.78 → modelflowib-2.79}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modelflowib
3
- Version: 2.78
3
+ Version: 2.79
4
4
  Summary: A tool to solve and manage dynamic economic and financial models
5
5
  Author-email: Ib Hansen <Ib.Hansen.Iv@gmail.com>
6
6
  License-Expression: MIT
@@ -181,8 +181,18 @@ class Parquet_Mixin:
181
181
  If True (only effective when large=True), store float64
182
182
  columns as float32 to roughly halve file size.
183
183
  On load the data is restored to float64.
184
+
185
+ A model instance without a lastdf holds no dataframe, so the feather
186
+ format has nothing to be fast about. Such a model is always written as a
187
+ structure only ``.pcims`` file on the JSON/gzip path.
184
188
  """
185
- if not large:
189
+ nodata = (not self.has_data) or (not kwargs.get('data', True)) \
190
+ or Path(file_path).suffix == self.nodata_suffix
191
+
192
+ if nodata and large:
193
+ print('No dataframe to store, dumping the structure in the json format instead')
194
+
195
+ if not large or nodata:
186
196
  # ── original JSON/gzip path ──────────────────────────────────
187
197
  return super().modeldump(file_path=file_path, keep=keep, **kwargs)
188
198
 
@@ -194,10 +204,10 @@ class Parquet_Mixin:
194
204
 
195
205
  # --- serialise current_per (small – keep as JSON) ----------------
196
206
  try:
197
- current_per_json = pd.Series(self.current_per).to_json()
207
+ current_per_json = pd.Series(self.dump_current_per).to_json()
198
208
  except Exception:
199
209
  current_per_json = _period_series_to_json(
200
- pd.Series(self.current_per)
210
+ pd.Series(self.dump_current_per)
201
211
  )
202
212
 
203
213
  # --- metadata dict (everything *except* DataFrames) --------------
@@ -242,7 +252,7 @@ class Parquet_Mixin:
242
252
  # current_per
243
253
  zf.writestr('current_per.json', current_per_json)
244
254
  # lastdf → feather
245
- zf.writestr('lastdf.feather', _df_to_feather_bytes(_maybe_compact(self.lastdf)))
255
+ zf.writestr('lastdf.feather', _df_to_feather_bytes(_maybe_compact(self.dump_df)))
246
256
  # keep_solutions → one feather each, indexed by position
247
257
  if keep:
248
258
  for i, (name, df) in enumerate(self.keep_solutions.items()):
@@ -291,11 +301,13 @@ class Parquet_Mixin:
291
301
 
292
302
  pinfile = Path(infile.replace('\\', '/'))
293
303
  if not pinfile.suffix:
294
- # try .pcimz first, fall back to .pcim
295
- if pinfile.with_suffix('.pcimz').exists():
296
- pinfile = pinfile.with_suffix('.pcimz')
304
+ # try .pcimz first, then .pcim, then the structure only .pcims
305
+ for trysuffix in ('.pcimz', cls.data_suffix, cls.nodata_suffix):
306
+ if pinfile.with_suffix(trysuffix).exists():
307
+ pinfile = pinfile.with_suffix(trysuffix)
308
+ break
297
309
  else:
298
- pinfile = pinfile.with_suffix('.pcim')
310
+ pinfile = pinfile.with_suffix(cls.data_suffix)
299
311
 
300
312
  # ── detect format ────────────────────────────────────────────────
301
313
  if pinfile.exists() and zipfile.is_zipfile(pinfile):