scimatlab 0.1.9.dev0__tar.gz → 0.1.10__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 (71) hide show
  1. scimatlab-0.1.10/.gitignore +24 -0
  2. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/PKG-INFO +1 -1
  3. scimatlab-0.1.10/src/scimatlab/matlab/+scifor/Log.m +139 -0
  4. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/for_each.m +20 -20
  5. scimatlab-0.1.9.dev0/.gitignore +0 -16
  6. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/pyproject.toml +0 -0
  7. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/__init__.py +0 -0
  8. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/bridge.py +0 -0
  9. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/build_csv_kwargs.m +0 -0
  10. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/cartesian_product.m +0 -0
  11. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/ensure_registered.m +0 -0
  12. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/from_python.m +0 -0
  13. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/function_name.m +0 -0
  14. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/hash_function.m +0 -0
  15. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/load_pathinput_checked.m +0 -0
  16. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/metadata_to_pydict.m +0 -0
  17. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/metadata_to_pykwargs.m +0 -0
  18. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/normalize_cell_column.m +0 -0
  19. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/pipeline_registry.m +0 -0
  20. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/pydict_to_struct.m +0 -0
  21. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/pylist_to_cell.m +0 -0
  22. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/reject_csv_spec_args.m +0 -0
  23. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/resolve_var_names.m +0 -0
  24. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/split_csv_args.m +0 -0
  25. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/split_version_arg.m +0 -0
  26. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/to_python.m +0 -0
  27. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/to_python_input.m +0 -0
  28. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/try_flatten_cell_column.m +0 -0
  29. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/try_stack_numeric.m +0 -0
  30. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/unwrap_input.m +0 -0
  31. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/+internal/validate_csv_filename.m +0 -0
  32. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/AcrossVariants.m +0 -0
  33. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/BaseVariable.m +0 -0
  34. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/ColName.m +0 -0
  35. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Filter.m +0 -0
  36. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Fixed.m +0 -0
  37. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Log.m +0 -0
  38. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Merge.m +0 -0
  39. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/PathGenerator.m +0 -0
  40. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Pipeline.m +0 -0
  41. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/SchemaKey.m +0 -0
  42. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/Variant.m +0 -0
  43. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/add_to_var_group.m +0 -0
  44. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/close_database.m +0 -0
  45. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/configure_database.m +0 -0
  46. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/exclude_schema.m +0 -0
  47. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/for_each.m +0 -0
  48. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/get_database.m +0 -0
  49. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/get_var_group.m +0 -0
  50. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/include_schema.m +0 -0
  51. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/isabsolute.m +0 -0
  52. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/list_exclusions.m +0 -0
  53. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/list_var_groups.m +0 -0
  54. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/raw_sql.m +0 -0
  55. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/register_variable.m +0 -0
  56. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/remove_from_var_group.m +0 -0
  57. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scidb/schema_key.m +0 -0
  58. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/Col.m +0 -0
  59. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/ColFilter.m +0 -0
  60. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/ColName.m +0 -0
  61. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/ColumnSelection.m +0 -0
  62. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/CompoundFilter.m +0 -0
  63. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/Fixed.m +0 -0
  64. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/Merge.m +0 -0
  65. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/NotFilter.m +0 -0
  66. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/PathInput.m +0 -0
  67. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/PathOutput.m +0 -0
  68. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/get_schema.m +0 -0
  69. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scifor/set_schema.m +0 -0
  70. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scihist/configure_database.m +0 -0
  71. {scimatlab-0.1.9.dev0 → scimatlab-0.1.10}/src/scimatlab/matlab/+scihist/for_each.m +0 -0
@@ -0,0 +1,24 @@
1
+ .venv
2
+ .DS_Store
3
+ */*/__pycache__
4
+ others_projects/sciforge
5
+ scistack-gui/extension/node_modules/
6
+ scistack-gui/frontend/node_modules/__pycache__/
7
+ *.pyc
8
+ __pycache__/
9
+ *.pyc
10
+ *.pyo
11
+ *.egg-info/
12
+ # Python package build output (rebuilt fresh by CI on every publish; a
13
+ # committed dist/ gets deleted by `rm -rf dist` mid-build and dirties the
14
+ # tree for hatch-vcs). Excludes scistack-gui/extension/dist/, which is an
15
+ # intentionally committed compiled bundle, not a Python build artifact.
16
+ /dist/
17
+ /*/dist/
18
+ # Generated database artifacts (DuckDB data/lineage + write-ahead logs)
19
+ *.duckdb
20
+ *.duckdb.wal
21
+ *.wal
22
+ scistack-gui/frontend/node_modules/
23
+ # mkdocs build output (regenerated by `mkdocs build`)
24
+ /site/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scimatlab
3
- Version: 0.1.9.dev0
3
+ Version: 0.1.10
4
4
  Summary: MATLAB bridge for the sci* scientific data processing framework
5
5
  License: MIT
6
6
  Requires-Python: >=3.9
@@ -0,0 +1,139 @@
1
+ classdef Log
2
+ %SCIFOR.LOG Unified logger that delegates to Python scistacklog.Log.
3
+ %
4
+ % scifor.Log.set_level('DEBUG') — show all messages (both sinks)
5
+ % scifor.Log.set_level('INFO') — show INFO, WARN, ERROR (default)
6
+ % scifor.Log.set_level('DEBUG', 'file') — full detail in scidb.log only
7
+ % scifor.Log.set_level('WARN') — show WARN, ERROR only
8
+ %
9
+ % scifor.Log.debug('Processing %d items', n)
10
+ % scifor.Log.info('Loaded %s', type_name)
11
+ % scifor.Log.warn('No data for %s', key)
12
+ % scifor.Log.err('Failed: %s', msg)
13
+ %
14
+ % Two sinks with independent levels (see the scistacklog package):
15
+ % console (stderr): HH:MM:SS [layer] message
16
+ % file (scidb.log): YYYY-MM-DD HH:MM:SS.FFF LEVEL [layer] message
17
+ %
18
+ % All logging calls delegate to Python's scistacklog.Log class directly —
19
+ % NOT via scidb — so that standalone (no-database) scifor usage in MATLAB
20
+ % stays free of a Python scidb dependency, mirroring Python scifor's own
21
+ % "scifor stays scidb-free; it depends only on scistacklog" contract.
22
+ % scidb.log.Log is a re-export of the same scistacklog.Log class, so
23
+ % scifor.Log and scidb.Log share one underlying Python singleton and one
24
+ % appdata cache — a level/path change from either class is visible to
25
+ % both, regardless of which one a given MATLAB session touches first.
26
+ %
27
+ % The log level is cached in MATLAB's appdata for performance, but the
28
+ % Python logger is the source of truth.
29
+
30
+ properties (Constant)
31
+ DEBUG = 0
32
+ INFO = 1
33
+ WARN = 2
34
+ ERROR = 3
35
+ end
36
+
37
+ methods (Static)
38
+
39
+ function set_level(level, sink)
40
+ %SET_LEVEL Set the log level of one or both sinks.
41
+ % scifor.Log.set_level(level) — both sinks
42
+ % scifor.Log.set_level(level, sink) — 'console' | 'file' | 'both'
43
+ % Accepts a string ('DEBUG','INFO','WARN','ERROR') or numeric (0-3).
44
+ % Delegates to Python logging to unify log level settings.
45
+ if isnumeric(level)
46
+ % Convert numeric to string for Python
47
+ level_names = {'DEBUG', 'INFO', 'WARN', 'ERROR'};
48
+ if level >= 0 && level <= 3
49
+ level = level_names{level + 1};
50
+ else
51
+ level = 'INFO';
52
+ end
53
+ end
54
+ % Set Python log level (source of truth)
55
+ if nargin < 2
56
+ py.scistacklog.Log.set_level(char(level));
57
+ else
58
+ py.scistacklog.Log.set_level(char(level), char(sink));
59
+ end
60
+ % Cache the effective level (min of the two sinks) for fast
61
+ % get_level() calls — a message suppressed by both sinks never
62
+ % needs to cross the Python bridge. Shared appdata key with
63
+ % scidb.Log: same underlying Python singleton, one cache.
64
+ level_num = double(py.scistacklog.Log.get_level());
65
+ setappdata(0, 'scidb_log_level', level_num);
66
+ end
67
+
68
+ function level = get_level()
69
+ %GET_LEVEL Get the current log level (default: INFO).
70
+ % Returns cached value for performance (avoids Python bridge crossing).
71
+ if isappdata(0, 'scidb_log_level')
72
+ level = getappdata(0, 'scidb_log_level');
73
+ else
74
+ level = scifor.Log.INFO;
75
+ end
76
+ end
77
+
78
+ function set_path(log_path)
79
+ %SET_PATH Set the log file path for file output.
80
+ % Called automatically by scidb.configure_database().
81
+ % Delegates to Python logging to unify log file location.
82
+ py.scistacklog.Log.set_path(char(log_path));
83
+ % Cache in MATLAB for legacy compatibility
84
+ setappdata(0, 'scidb_log_path', char(log_path));
85
+ end
86
+
87
+ function p = get_path()
88
+ %GET_PATH Get the current log file path (empty if not set).
89
+ if isappdata(0, 'scidb_log_path')
90
+ p = getappdata(0, 'scidb_log_path');
91
+ else
92
+ p = '';
93
+ end
94
+ end
95
+
96
+ function debug(fmt, varargin)
97
+ %DEBUG Log a message at DEBUG level.
98
+ % Delegates to Python logging for unified output; MATLAB-originated
99
+ % lines carry the [matlab] layer tag.
100
+ if scifor.Log.get_level() <= scifor.Log.DEBUG
101
+ msg = sprintf(fmt, varargin{:});
102
+ py.scistacklog.Log.debug(msg, pyargs('layer', 'matlab'));
103
+ end
104
+ end
105
+
106
+ function info(fmt, varargin)
107
+ %INFO Log a message at INFO level.
108
+ % Delegates to Python logging for unified output; MATLAB-originated
109
+ % lines carry the [matlab] layer tag.
110
+ if scifor.Log.get_level() <= scifor.Log.INFO
111
+ msg = sprintf(fmt, varargin{:});
112
+ py.scistacklog.Log.info(msg, pyargs('layer', 'matlab'));
113
+ end
114
+ end
115
+
116
+ function warn(fmt, varargin)
117
+ %WARN Log a message at WARN level.
118
+ % Delegates to Python logging for unified output; MATLAB-originated
119
+ % lines carry the [matlab] layer tag.
120
+ if scifor.Log.get_level() <= scifor.Log.WARN
121
+ msg = sprintf(fmt, varargin{:});
122
+ py.scistacklog.Log.warn(msg, pyargs('layer', 'matlab'));
123
+ end
124
+ end
125
+
126
+ function err(fmt, varargin)
127
+ %ERR Log a message at ERROR level.
128
+ % Named 'err' to avoid conflict with MATLAB's built-in 'error'.
129
+ % Delegates to Python logging for unified output; MATLAB-originated
130
+ % lines carry the [matlab] layer tag.
131
+ if scifor.Log.get_level() <= scifor.Log.ERROR
132
+ msg = sprintf(fmt, varargin{:});
133
+ py.scistacklog.Log.error(msg, pyargs('layer', 'matlab'));
134
+ end
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -171,7 +171,7 @@ function varargout = for_each(fn, inputs, varargin)
171
171
  placeholder_keys = string(pi.placeholder_keys());
172
172
  if ~isempty(discovered_combos) && all(ismember(meta_keys, placeholder_keys))
173
173
  opts.all_combos = project_combos(discovered_combos, meta_keys);
174
- scidb.Log.debug('pathinput_discovery: using %d disk combos', ...
174
+ scifor.Log.debug('pathinput_discovery: using %d disk combos', ...
175
175
  numel(opts.all_combos));
176
176
  end
177
177
  end
@@ -181,7 +181,7 @@ function varargout = for_each(fn, inputs, varargin)
181
181
  for i = 1:numel(meta_values)
182
182
  if isempty(meta_values{i})
183
183
  if key_has_source(inputs, meta_keys(i), pi)
184
- scidb.Log.warn('no values found for ''%s'' in inputs, 0 iterations', ...
184
+ scifor.Log.warn('no values found for ''%s'' in inputs, 0 iterations', ...
185
185
  meta_keys(i));
186
186
  else
187
187
  error('scifor:for_each', ...
@@ -423,16 +423,16 @@ function varargout = for_each(fn, inputs, varargin)
423
423
  else
424
424
  iter_str = sprintf('for_each(%s) — %d iterations', fn_name, total);
425
425
  end
426
- scidb.Log.info('%s: %s', iter_str, meta_summary);
426
+ scifor.Log.info('%s: %s', iter_str, meta_summary);
427
427
 
428
428
  % --- Detailed config: inputs ---
429
429
  inputs_str = format_inputs(inputs, input_names, data_idx);
430
- scidb.Log.info('inputs: %s', inputs_str);
430
+ scifor.Log.info('inputs: %s', inputs_str);
431
431
 
432
432
  % --- Detailed config: metadata actual values ---
433
433
  for mk2 = 1:numel(meta_keys)
434
434
  if ~startsWith(meta_keys(mk2), "__")
435
- scidb.Log.debug('%s=%s', meta_keys(mk2), format_meta_values(meta_values{mk2}));
435
+ scifor.Log.debug('%s=%s', meta_keys(mk2), format_meta_values(meta_values{mk2}));
436
436
  end
437
437
  end
438
438
 
@@ -455,7 +455,7 @@ function varargout = for_each(fn, inputs, varargin)
455
455
  opt_parts{end+1} = sprintf('where=%s', class(where_filter));
456
456
  end
457
457
  if ~isempty(opt_parts)
458
- scidb.Log.info('options: %s', strjoin(opt_parts, ', '));
458
+ scifor.Log.info('options: %s', strjoin(opt_parts, ', '));
459
459
  end
460
460
 
461
461
  % --- Dry-run header ---
@@ -561,7 +561,7 @@ function varargout = for_each(fn, inputs, varargin)
561
561
  && elapsed_now >= PROGRESS_START_DELAY_S ...
562
562
  && (elapsed_now - progress_last_emit) >= PROGRESS_MIN_INTERVAL_S
563
563
  progress_last_emit = elapsed_now;
564
- scidb.Log.info(['progress: %s=%s (%d/%d) — %d/%d combos ' ...
564
+ scifor.Log.info(['progress: %s=%s (%d/%d) — %d/%d combos ' ...
565
565
  '(%.1f%%), completed=%d, failed=%d, elapsed=%.1fs'], ...
566
566
  progress_key, char(string(pv)), progress_seen, ...
567
567
  progress_total, c - 1, total, ...
@@ -702,7 +702,7 @@ function varargout = for_each(fn, inputs, varargin)
702
702
  run_msg = sprintf('[run] %s: %s(%s)', metadata_str, fn_name, ...
703
703
  strjoin(string(input_names'), ', '));
704
704
  end
705
- scidb.Log.debug('%s', run_msg);
705
+ scifor.Log.debug('%s', run_msg);
706
706
 
707
707
  % share_limits injection: append each named input's group limits as
708
708
  % trailing positional args (Python injects named kwargs; MATLAB has
@@ -802,7 +802,7 @@ function varargout = for_each(fn, inputs, varargin)
802
802
  end
803
803
  end
804
804
  catch err2
805
- scidb.Log.warn('%s: cannot distribute output %d: %s', ...
805
+ scifor.Log.warn('%s: cannot distribute output %d: %s', ...
806
806
  metadata_str, o, err2.message);
807
807
  continue;
808
808
  end
@@ -827,7 +827,7 @@ function varargout = for_each(fn, inputs, varargin)
827
827
  varargout{1} = [];
828
828
  end
829
829
  else
830
- scidb.Log.info('for_each(%s) done in %.1fs: completed=%d, failed=%d, total=%d', ...
830
+ scifor.Log.info('for_each(%s) done in %.1fs: completed=%d, failed=%d, total=%d', ...
831
831
  fn_name, toc(loop_t0), completed, skipped, total);
832
832
  % One line per distinct failure reason (combos capped at 5), so the
833
833
  % default (INFO) log answers "what failed and why".
@@ -841,7 +841,7 @@ function varargout = for_each(fn, inputs, varargin)
841
841
  shown = sprintf('%s (+%d more)', shown, ...
842
842
  numel(combos_for_reason) - n_shown);
843
843
  end
844
- scidb.Log.info('failed: %d × "%s" — %s', ...
844
+ scifor.Log.info('failed: %d × "%s" — %s', ...
845
845
  numel(combos_for_reason), reason, shown);
846
846
  end
847
847
  if n_outputs == 0
@@ -1561,11 +1561,11 @@ function values = decategorize_schema_column(col_data, key, input_name)
1561
1561
  && all(~isnan(nums)) && all(string(nums) == labels);
1562
1562
  if lossless
1563
1563
  values = nums;
1564
- scidb.Log.debug(['schema key ''%s'' (input ''%s''): categorical ' ...
1564
+ scifor.Log.debug(['schema key ''%s'' (input ''%s''): categorical ' ...
1565
1565
  'column recovered as numeric'], key, input_name);
1566
1566
  else
1567
1567
  values = labels;
1568
- scidb.Log.debug(['schema key ''%s'' (input ''%s''): categorical ' ...
1568
+ scifor.Log.debug(['schema key ''%s'' (input ''%s''): categorical ' ...
1569
1569
  'column kept as strings (labels are not canonical numeric ' ...
1570
1570
  'spellings)'], key, input_name);
1571
1571
  end
@@ -1600,7 +1600,7 @@ function types = capture_schema_column_types(inputs, keys)
1600
1600
  end
1601
1601
  if ~isfield(types, key)
1602
1602
  types.(key) = info;
1603
- scidb.Log.debug(['schema key ''%s'' (input ''%s''): input ' ...
1603
+ scifor.Log.debug(['schema key ''%s'' (input ''%s''): input ' ...
1604
1604
  'column type %s'], key, input_names{p}, info.class);
1605
1605
  elseif ~strcmp(types.(key).class, info.class)
1606
1606
  types.(key).conflict = true;
@@ -1625,7 +1625,7 @@ function tbl = restore_schema_column_types(tbl, col_types)
1625
1625
  end
1626
1626
  info = col_types.(key);
1627
1627
  if info.conflict
1628
- scidb.Log.warn(['schema key ''%s'': input tables disagree on ' ...
1628
+ scifor.Log.warn(['schema key ''%s'': input tables disagree on ' ...
1629
1629
  'column type — leaving the output column as %s'], ...
1630
1630
  key, class(tbl.(key)));
1631
1631
  continue;
@@ -1636,10 +1636,10 @@ function tbl = restore_schema_column_types(tbl, col_types)
1636
1636
  end
1637
1637
  try
1638
1638
  tbl.(key) = cast_schema_column(col, info);
1639
- scidb.Log.debug(['schema key ''%s'': output column restored ' ...
1639
+ scifor.Log.debug(['schema key ''%s'': output column restored ' ...
1640
1640
  'to input type %s'], key, info.class);
1641
1641
  catch err
1642
- scidb.Log.warn(['schema key ''%s'': cannot restore input ' ...
1642
+ scifor.Log.warn(['schema key ''%s'': cannot restore input ' ...
1643
1643
  'column type %s (%s) — leaving as %s'], ...
1644
1644
  key, info.class, err.message, class(col));
1645
1645
  end
@@ -2104,7 +2104,7 @@ function [meta_args, opts] = split_options(varargin)
2104
2104
  i = i + 2;
2105
2105
  continue;
2106
2106
  case "_log_fn"
2107
- % Deprecated — ignored. scifor logs through scidb.Log
2107
+ % Deprecated — ignored. scifor logs through scifor.Log
2108
2108
  % (scistacklog facade) directly; accepted so existing
2109
2109
  % call sites don't break.
2110
2110
  i = i + 2;
@@ -2334,12 +2334,12 @@ function [failure_reasons, failure_order] = record_iteration_failure( ...
2334
2334
  else
2335
2335
  failure_reasons(reason) = {metadata_str};
2336
2336
  failure_order{end+1} = reason;
2337
- scidb.Log.warn(['iteration failed: %s — %s: %s ' ...
2337
+ scifor.Log.warn(['iteration failed: %s — %s: %s ' ...
2338
2338
  '(first occurrence; report follows)\n%s'], ...
2339
2339
  metadata_str, context, err.message, ...
2340
2340
  getReport(err, 'extended', 'hyperlinks', 'off'));
2341
2341
  end
2342
- scidb.Log.debug('[skip] %s: %s: %s', metadata_str, context, err.message);
2342
+ scifor.Log.debug('[skip] %s: %s: %s', metadata_str, context, err.message);
2343
2343
  end
2344
2344
 
2345
2345
 
@@ -1,16 +0,0 @@
1
- .venv
2
- .DS_Store
3
- */*/__pycache__
4
- others_projects/sciforge
5
- scistack-gui/extension/node_modules/
6
- scistack-gui/frontend/node_modules/__pycache__/
7
- *.pyc
8
- __pycache__/
9
- *.pyc
10
- *.pyo
11
-
12
- # Generated database artifacts (DuckDB data/lineage + write-ahead logs)
13
- *.duckdb
14
- *.duckdb.wal
15
- *.wal
16
- scistack-gui/frontend/node_modules/