dynamicslab / pysindy

A package for the sparse identification of nonlinear dynamical systems from data
https://pysindy.readthedocs.io/en/latest/
Other
1.36k stars 304 forks source link

Help in figuring out the cause behind TypeError while fitting with tensor libraries #446

Closed SunandanAdhikary closed 5 months ago

SunandanAdhikary commented 6 months ago

I am getting an error while trying to fit a linear parameter-varying model that looks like this:

image

The error :

TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

_Note that the x_trainand u_trainare numpy ndarrays of 251x2 dimension with float64 elements. Here is the whole code._ Can you please help in figuring out the problem here?

Reproducing code example:

import numpy as np
import pysindy as ps

x_train = np.random.normal(size=(251,2))
u_train = np.random.normal(size=(251,2))

states = ['beta','r']
inputs = ['delta', 'vx']
ensemble_opt = ps.STLSQ()#(threshold = 0.5)
# identity_lib = ps.IdentityLibrary()
poly_lib = ps.PolynomialLibrary(degree=1)
lib_func = [lambda vx: 1/vx,
            lambda vx: 1/vx^2]
lib_func_names = [lambda vx: '1/(vx= '+vx+')',
                  lambda vx: '1/(vx= '+vx+')^2']

custom_lib = ps.CustomLibrary(library_functions=lib_func, 
                              function_names=lib_func_names)

# 2 states: beta, r + 2 inputs: delta, vx
varuse_libwise_tmp = np.tile([0, 1, 2, 3],2)
varuse_libwise = np.reshape(varuse_libwise_tmp,[2,4])

varuse_libwise[0, 3] = 2        # vx: no identity lib
varuse_libwise[1, 0] = 3        # custom lib : only vx
varuse_libwise[1, 1] = 3
varuse_libwise[1, 2] = 3
'''[[0, 1, 2, 2],--i.e. 3rd variable won't be used in lib1
    [3, 3, 3, 3]]--i.e. only 3rd variable will be used in lib2'''

tensoring_libs = [[1, 1]]       # tensoring between library 1 and 2 variables for fitting
                                # i.e. multiplying library 1 and library 2 variables

gen_lib = ps.GeneralizedLibrary([poly_lib, custom_lib],
                                tensor_array=tensoring_libs,
                                inputs_per_library=varuse_libwise)

model = ps.SINDy(feature_names=states, optimizer=ensemble_opt, feature_library=gen_lib)

model.fit(x_train, u=u_train, t = float(dp.Ts), quiet=True)

model.get_feature_names()

model.print()

Error message:

` TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''` ``` --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[14], [line 37](vscode-notebook-cell:?execution_count=14&line=37) [31](vscode-notebook-cell:?execution_count=14&line=31) gen_lib = ps.GeneralizedLibrary([poly_lib, custom_lib], [32](vscode-notebook-cell:?execution_count=14&line=32) tensor_array=tensoring_libs, [33](vscode-notebook-cell:?execution_count=14&line=33) inputs_per_library=varuse_libwise) [35](vscode-notebook-cell:?execution_count=14&line=35) model = ps.SINDy(feature_names=states, optimizer=ensemble_opt, feature_library=gen_lib) ---> [37](vscode-notebook-cell:?execution_count=14&line=37) model.fit(x_train, u=u_train, t = float(dp.Ts), quiet=True) [39](vscode-notebook-cell:?execution_count=14&line=39) model.get_feature_names() [41](vscode-notebook-cell:?execution_count=14&line=41) model.print() File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\pysindy.py:414](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:414), in SINDy.fit(self, x, t, x_dot, u, multiple_trajectories, unbias, quiet, ensemble, library_ensemble, replace, n_candidates_to_drop, n_subset, n_models, ensemble_aggregator) [412](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:412) warnings.filterwarnings(action, category=LinAlgWarning) [413](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:413) warnings.filterwarnings(action, category=UserWarning) --> [414](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:414) self.model.fit(x, x_dot) [416](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:416) # New version of sklearn changes attribute name [417](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:417) if float(__version__[:3]) >= 1.0: File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:402](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:402), in Pipeline.fit(self, X, y, **fit_params) [376](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:376) """Fit the model. [377](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:377) [378](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:378) Fit all the transformers one after the other and transform the (...) [399](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:399) Pipeline with fitted steps. [400](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:400) """ [401](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:401) fit_params_steps = self._check_fit_params(**fit_params) --> [402](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:402) Xt = self._fit(X, y, **fit_params_steps) [403](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:403) with _print_elapsed_time("Pipeline", self._log_message(len(self.steps) - 1)): [404](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:404) if self._final_estimator != "passthrough": File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:360](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:360), in Pipeline._fit(self, X, y, **fit_params_steps) [358](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:358) cloned_transformer = clone(transformer) [359](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:359) # Fit or load from cache the current transformer --> [360](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:360) X, fitted_transformer = fit_transform_one_cached( [361](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:361) cloned_transformer, [362](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:362) X, [363](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:363) y, [364](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:364) None, [365](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:365) message_clsname="Pipeline", [366](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:366) message=self._log_message(step_idx), [367](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:367) **fit_params_steps[name], [368](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:368) ) [369](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:369) # Replace the transformer of the step with the fitted [370](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:370) # transformer. This is necessary when loading the transformer [371](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:371) # from the cache. [372](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:372) self.steps[step_idx] = (name, fitted_transformer) File [c:\Users\sunan\miniconda3\lib\site-packages\joblib\memory.py:349](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:349), in NotMemorizedFunc.__call__(self, *args, **kwargs) [348](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:348) def __call__(self, *args, **kwargs): --> [349](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:349) return self.func(*args, **kwargs) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:894](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:894), in _fit_transform_one(transformer, X, y, weight, message_clsname, message, **fit_params) [892](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:892) with _print_elapsed_time(message_clsname, message): [893](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:893) if hasattr(transformer, "fit_transform"): --> [894](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:894) res = transformer.fit_transform(X, y, **fit_params) [895](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:895) else: [896](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:896) res = transformer.fit(X, y, **fit_params).transform(X) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\base.py:851](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:851), in TransformerMixin.fit_transform(self, X, y, **fit_params) [848](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:848) return self.fit(X, **fit_params).transform(X) [849](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:849) else: [850](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:850) # fit method of arity 2 (supervised transformation) --> [851](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:851) return self.fit(X, y, **fit_params).transform(X) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\base.py:191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191), in x_sequence_or_item..func(self, x, *args, **kwargs) [189](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:189) if isinstance(x, Sequence): [190](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:190) xs = [AxesArray(xi, comprehend_axes(xi)) for xi in x] --> [191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191) result = wrapped_func(self, xs, *args, **kwargs) [192](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:192) if isinstance(result, Sequence): # e.g. transform() returns x [193](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:193) return [AxesArray(xp, comprehend_axes(xp)) for xp in result] File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\generalized_library.py:267](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:267), in GeneralizedLibrary.transform(self, x_full) [264](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:264) if i < self.inputs_per_library_.shape[0]: [265](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:265) if i not in self.exclude_libs_: [266](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:266) xps.append( --> [267](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:267) lib.transform( [268](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:268) [x[..., np.unique(self.inputs_per_library_[i, :])]] [269](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:269) )[0] [270](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:270) ) [271](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:271) else: [272](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:272) xps.append(lib.transform([x])[0]) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\base.py:191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191), in x_sequence_or_item..func(self, x, *args, **kwargs) [189](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:189) if isinstance(x, Sequence): [190](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:190) xs = [AxesArray(xi, comprehend_axes(xi)) for xi in x] --> [191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191) result = wrapped_func(self, xs, *args, **kwargs) [192](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:192) if isinstance(result, Sequence): # e.g. transform() returns x [193](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:193) return [AxesArray(xp, comprehend_axes(xp)) for xp in result] File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\custom_library.py:230](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:230), in CustomLibrary.transform(self, x_full) [226](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:226) for f in self.functions: [227](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:227) for c in self._combinations( [228](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:228) n_input_features, f.__code__.co_argcount, self.interaction_only [229](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:229) ): --> [230](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:230) xp[..., library_idx] = f(*[x[..., j] for j in c]) [231](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:231) library_idx += 1 [233](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:233) xp = AxesArray(xp, comprehend_axes(xp)) Cell In[14], [line 8](vscode-notebook-cell:?execution_count=14&line=8) [5](vscode-notebook-cell:?execution_count=14&line=5) # identity_lib = ps.IdentityLibrary() [6](vscode-notebook-cell:?execution_count=14&line=6) poly_lib = ps.PolynomialLibrary(degree=1) [7](vscode-notebook-cell:?execution_count=14&line=7) lib_func = [lambda vx: 1/vx, ----> [8](vscode-notebook-cell:?execution_count=14&line=8) lambda vx: 1/vx^2] [9](vscode-notebook-cell:?execution_count=14&line=9) lib_func_names = [lambda vx: '1/(vx= '+vx+')', [10](vscode-notebook-cell:?execution_count=14&line=10) lambda vx: '1/(vx= '+vx+')^2'] [12](vscode-notebook-cell:?execution_count=14&line=12) custom_lib = ps.CustomLibrary(library_functions=lib_func, [13](vscode-notebook-cell:?execution_count=14&line=13) function_names=lib_func_names) File [c:\Users\sunan\miniconda3\lib\site-packages\numpy\lib\mixins.py:21](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:21), in _binary_method..func(self, other) [19](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:19) if _disables_array_ufunc(other): [20](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:20) return NotImplemented ---> [21](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:21) return ufunc(self, other) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\utils\axes.py:83](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:83), in AxesArray.__array_ufunc__(self, ufunc, method, out, *inputs, **kwargs) [81](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:81) else: [82](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:82) outputs = (None,) * ufunc.nout ---> [83](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:83) results = super().__array_ufunc__(ufunc, method, *args, **kwargs) [84](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:84) if results is NotImplemented: [85](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:85) return NotImplemented TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' ```

PySINDy/Python version information:

Using python 3.9.15 and pysindy version: 1.7.5 @IpsitaKoley @Aditya16828

SunandanAdhikary commented 6 months ago

Here is the detailed error for your reference : pysindy_error.txt

pysindy_error.txt ``` { "name": "TypeError", "message": "ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''", "stack": "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)\nCell \u001b[1;32mIn[102], line 36\u001b[0m\n\u001b[0;32m 30\u001b[0m gen_lib \u001b[38;5;241m=\u001b[39m ps\u001b[38;5;241m.\u001b[39mGeneralizedLibrary([poly_lib, custom_lib],\n\u001b[0;32m 31\u001b[0m tensor_array\u001b[38;5;241m=\u001b[39mtensoring_libs,\n\u001b[0;32m 32\u001b[0m inputs_per_library\u001b[38;5;241m=\u001b[39mvaruse_libwise)\n\u001b[0;32m 34\u001b[0m model \u001b[38;5;241m=\u001b[39m ps\u001b[38;5;241m.\u001b[39mSINDy(feature_names\u001b[38;5;241m=\u001b[39mstates, optimizer\u001b[38;5;241m=\u001b[39mensemble_opt, feature_library\u001b[38;5;241m=\u001b[39mgen_lib)\n\u001b[1;32m---> 36\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mu\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mu_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mt\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mfloat\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquiet\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m model\u001b[38;5;241m.\u001b[39mget_feature_names()\n\u001b[0;32m 40\u001b[0m model\u001b[38;5;241m.\u001b[39mprint()\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\pysindy.py:414\u001b[0m, in \u001b[0;36mSINDy.fit\u001b[1;34m(self, x, t, x_dot, u, multiple_trajectories, unbias, quiet, ensemble, library_ensemble, replace, n_candidates_to_drop, n_subset, n_models, ensemble_aggregator)\u001b[0m\n\u001b[0;32m 412\u001b[0m warnings\u001b[38;5;241m.\u001b[39mfilterwarnings(action, category\u001b[38;5;241m=\u001b[39mLinAlgWarning)\n\u001b[0;32m 413\u001b[0m warnings\u001b[38;5;241m.\u001b[39mfilterwarnings(action, category\u001b[38;5;241m=\u001b[39m\u001b[38;5;167;01mUserWarning\u001b[39;00m)\n\u001b[1;32m--> 414\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mx_dot\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 416\u001b[0m \u001b[38;5;66;03m# New version of sklearn changes attribute name\u001b[39;00m\n\u001b[0;32m 417\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mfloat\u001b[39m(__version__[:\u001b[38;5;241m3\u001b[39m]) \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1.0\u001b[39m:\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\pipeline.py:402\u001b[0m, in \u001b[0;36mPipeline.fit\u001b[1;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[38;5;124;03m\"\"\"Fit the model.\u001b[39;00m\n\u001b[0;32m 377\u001b[0m \n\u001b[0;32m 378\u001b[0m \u001b[38;5;124;03mFit all the transformers one after the other and transform the\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 399\u001b[0m \u001b[38;5;124;03m Pipeline with fitted steps.\u001b[39;00m\n\u001b[0;32m 400\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 401\u001b[0m fit_params_steps \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_fit_params(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params)\n\u001b[1;32m--> 402\u001b[0m Xt \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fit(X, y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params_steps)\n\u001b[0;32m 403\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _print_elapsed_time(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPipeline\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_message(\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msteps) \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m)):\n\u001b[0;32m 404\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_final_estimator \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpassthrough\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\pipeline.py:360\u001b[0m, in \u001b[0;36mPipeline._fit\u001b[1;34m(self, X, y, **fit_params_steps)\u001b[0m\n\u001b[0;32m 358\u001b[0m cloned_transformer \u001b[38;5;241m=\u001b[39m clone(transformer)\n\u001b[0;32m 359\u001b[0m \u001b[38;5;66;03m# Fit or load from cache the current transformer\u001b[39;00m\n\u001b[1;32m--> 360\u001b[0m X, fitted_transformer \u001b[38;5;241m=\u001b[39m fit_transform_one_cached(\n\u001b[0;32m 361\u001b[0m cloned_transformer,\n\u001b[0;32m 362\u001b[0m X,\n\u001b[0;32m 363\u001b[0m y,\n\u001b[0;32m 364\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 365\u001b[0m message_clsname\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPipeline\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 366\u001b[0m message\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_message(step_idx),\n\u001b[0;32m 367\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params_steps[name],\n\u001b[0;32m 368\u001b[0m )\n\u001b[0;32m 369\u001b[0m \u001b[38;5;66;03m# Replace the transformer of the step with the fitted\u001b[39;00m\n\u001b[0;32m 370\u001b[0m \u001b[38;5;66;03m# transformer. This is necessary when loading the transformer\u001b[39;00m\n\u001b[0;32m 371\u001b[0m \u001b[38;5;66;03m# from the cache.\u001b[39;00m\n\u001b[0;32m 372\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msteps[step_idx] \u001b[38;5;241m=\u001b[39m (name, fitted_transformer)\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\joblib\\memory.py:349\u001b[0m, in \u001b[0;36mNotMemorizedFunc.__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 348\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__call__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 349\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\pipeline.py:894\u001b[0m, in \u001b[0;36m_fit_transform_one\u001b[1;34m(transformer, X, y, weight, message_clsname, message, **fit_params)\u001b[0m\n\u001b[0;32m 892\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _print_elapsed_time(message_clsname, message):\n\u001b[0;32m 893\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(transformer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfit_transform\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m--> 894\u001b[0m res \u001b[38;5;241m=\u001b[39m transformer\u001b[38;5;241m.\u001b[39mfit_transform(X, y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params)\n\u001b[0;32m 895\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 896\u001b[0m res \u001b[38;5;241m=\u001b[39m transformer\u001b[38;5;241m.\u001b[39mfit(X, y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params)\u001b[38;5;241m.\u001b[39mtransform(X)\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\utils\\_set_output.py:142\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 142\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m f(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 144\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[0;32m 146\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 147\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 148\u001b[0m )\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\utils\\_set_output.py:142\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 142\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m f(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 144\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[0;32m 146\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 147\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 148\u001b[0m )\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\utils\\_set_output.py:142\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 142\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m f(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 144\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[0;32m 146\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 147\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 148\u001b[0m )\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\base.py:851\u001b[0m, in \u001b[0;36mTransformerMixin.fit_transform\u001b[1;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[0;32m 848\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfit(X, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params)\u001b[38;5;241m.\u001b[39mtransform(X)\n\u001b[0;32m 849\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 850\u001b[0m \u001b[38;5;66;03m# fit method of arity 2 (supervised transformation)\u001b[39;00m\n\u001b[1;32m--> 851\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_params\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\utils\\_set_output.py:142\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 142\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m f(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 144\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[0;32m 146\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 147\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 148\u001b[0m )\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\feature_library\\base.py:191\u001b[0m, in \u001b[0;36mx_sequence_or_item..func\u001b[1;34m(self, x, *args, **kwargs)\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(x, Sequence):\n\u001b[0;32m 190\u001b[0m xs \u001b[38;5;241m=\u001b[39m [AxesArray(xi, comprehend_axes(xi)) \u001b[38;5;28;01mfor\u001b[39;00m xi \u001b[38;5;129;01min\u001b[39;00m x]\n\u001b[1;32m--> 191\u001b[0m result \u001b[38;5;241m=\u001b[39m wrapped_func(\u001b[38;5;28mself\u001b[39m, xs, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(result, Sequence): \u001b[38;5;66;03m# e.g. transform() returns x\u001b[39;00m\n\u001b[0;32m 193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [AxesArray(xp, comprehend_axes(xp)) \u001b[38;5;28;01mfor\u001b[39;00m xp \u001b[38;5;129;01min\u001b[39;00m result]\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\feature_library\\generalized_library.py:267\u001b[0m, in \u001b[0;36mGeneralizedLibrary.transform\u001b[1;34m(self, x_full)\u001b[0m\n\u001b[0;32m 264\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m<\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minputs_per_library_\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]:\n\u001b[0;32m 265\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexclude_libs_:\n\u001b[0;32m 266\u001b[0m xps\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m--> 267\u001b[0m \u001b[43mlib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 268\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mx\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munique\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minputs_per_library_\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m 269\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m 270\u001b[0m )\n\u001b[0;32m 271\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 272\u001b[0m xps\u001b[38;5;241m.\u001b[39mappend(lib\u001b[38;5;241m.\u001b[39mtransform([x])[\u001b[38;5;241m0\u001b[39m])\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\sklearn\\utils\\_set_output.py:142\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 142\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m f(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 144\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (\n\u001b[0;32m 146\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 147\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 148\u001b[0m )\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\feature_library\\base.py:191\u001b[0m, in \u001b[0;36mx_sequence_or_item..func\u001b[1;34m(self, x, *args, **kwargs)\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(x, Sequence):\n\u001b[0;32m 190\u001b[0m xs \u001b[38;5;241m=\u001b[39m [AxesArray(xi, comprehend_axes(xi)) \u001b[38;5;28;01mfor\u001b[39;00m xi \u001b[38;5;129;01min\u001b[39;00m x]\n\u001b[1;32m--> 191\u001b[0m result \u001b[38;5;241m=\u001b[39m wrapped_func(\u001b[38;5;28mself\u001b[39m, xs, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(result, Sequence): \u001b[38;5;66;03m# e.g. transform() returns x\u001b[39;00m\n\u001b[0;32m 193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [AxesArray(xp, comprehend_axes(xp)) \u001b[38;5;28;01mfor\u001b[39;00m xp \u001b[38;5;129;01min\u001b[39;00m result]\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\feature_library\\custom_library.py:230\u001b[0m, in \u001b[0;36mCustomLibrary.transform\u001b[1;34m(self, x_full)\u001b[0m\n\u001b[0;32m 226\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m f \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunctions:\n\u001b[0;32m 227\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m c \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_combinations(\n\u001b[0;32m 228\u001b[0m n_input_features, f\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__code__\u001b[39m\u001b[38;5;241m.\u001b[39mco_argcount, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minteraction_only\n\u001b[0;32m 229\u001b[0m ):\n\u001b[1;32m--> 230\u001b[0m xp[\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m, library_idx] \u001b[38;5;241m=\u001b[39m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mx\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mj\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mj\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mc\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 231\u001b[0m library_idx \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 233\u001b[0m xp \u001b[38;5;241m=\u001b[39m AxesArray(xp, comprehend_axes(xp))\n\nCell \u001b[1;32mIn[102], line 7\u001b[0m, in \u001b[0;36m\u001b[1;34m(vx)\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;66;03m# identity_lib = ps.IdentityLibrary()\u001b[39;00m\n\u001b[0;32m 5\u001b[0m poly_lib \u001b[38;5;241m=\u001b[39m ps\u001b[38;5;241m.\u001b[39mPolynomialLibrary(degree\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 6\u001b[0m lib_func \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28;01mlambda\u001b[39;00m vx: \u001b[38;5;241m1\u001b[39m\u001b[38;5;241m/\u001b[39mvx,\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m vx: \u001b[38;5;241;43m1\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43mvx\u001b[49m\u001b[38;5;241;43m^\u001b[39;49m\u001b[38;5;241;43m2\u001b[39;49m]\n\u001b[0;32m 8\u001b[0m lib_func_names \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28;01mlambda\u001b[39;00m vx: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m1/(vx= \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m+\u001b[39mvx\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m 9\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m vx: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m1/(vx= \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m+\u001b[39mvx\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m)^2\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 11\u001b[0m custom_lib \u001b[38;5;241m=\u001b[39m ps\u001b[38;5;241m.\u001b[39mCustomLibrary(library_functions\u001b[38;5;241m=\u001b[39mlib_func, \n\u001b[0;32m 12\u001b[0m function_names\u001b[38;5;241m=\u001b[39mlib_func_names)\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\numpy\\lib\\mixins.py:21\u001b[0m, in \u001b[0;36m_binary_method..func\u001b[1;34m(self, other)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _disables_array_ufunc(other):\n\u001b[0;32m 20\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m\n\u001b[1;32m---> 21\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mufunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mother\u001b[49m\u001b[43m)\u001b[49m\n\nFile \u001b[1;32mc:\\Users\\sunan\\miniconda3\\lib\\site-packages\\pysindy\\utils\\axes.py:83\u001b[0m, in \u001b[0;36mAxesArray.__array_ufunc__\u001b[1;34m(self, ufunc, method, out, *inputs, **kwargs)\u001b[0m\n\u001b[0;32m 81\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 82\u001b[0m outputs \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28;01mNone\u001b[39;00m,) \u001b[38;5;241m*\u001b[39m ufunc\u001b[38;5;241m.\u001b[39mnout\n\u001b[1;32m---> 83\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m__array_ufunc__(ufunc, method, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 84\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m results \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m:\n\u001b[0;32m 85\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m\n\n\u001b[1;31mTypeError\u001b[0m: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''" } ```
Jacob-Stevens-Haas commented 6 months ago

This seems like an issue with AxesArray. FWIW, rather than uploading files, if they're long and distracting, you can put them in a spoiler dropdown. I hope you don't mind, I edited your comment to show you how. But it looks like the way you copied and saved the error lost line endings and messed up the encoding, so it's a little bit unreadable.

I tried running your code (adding

import numpy

x_train = np.arange(2* 251).reshape((251,2))
u_train = np.arange(2* 251).reshape((251,2))

) but I don't know what dp is (in model.fit(x_train, u=u_train, t = float(dp.Ts), quiet=True)), so I'm getting a NameError.

SunandanAdhikary commented 6 months ago

Excuse me. I have hurriedly uploaded it in the wrong format. PFA the error here. dp is an object that I created. You can use 0.04 as the sampling interval.

error ``` --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[14], [line 37](vscode-notebook-cell:?execution_count=14&line=37) [31](vscode-notebook-cell:?execution_count=14&line=31) gen_lib = ps.GeneralizedLibrary([poly_lib, custom_lib], [32](vscode-notebook-cell:?execution_count=14&line=32) tensor_array=tensoring_libs, [33](vscode-notebook-cell:?execution_count=14&line=33) inputs_per_library=varuse_libwise) [35](vscode-notebook-cell:?execution_count=14&line=35) model = ps.SINDy(feature_names=states, optimizer=ensemble_opt, feature_library=gen_lib) ---> [37](vscode-notebook-cell:?execution_count=14&line=37) model.fit(x_train, u=u_train, t = float(dp.Ts), quiet=True) [39](vscode-notebook-cell:?execution_count=14&line=39) model.get_feature_names() [41](vscode-notebook-cell:?execution_count=14&line=41) model.print() File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\pysindy.py:414](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:414), in SINDy.fit(self, x, t, x_dot, u, multiple_trajectories, unbias, quiet, ensemble, library_ensemble, replace, n_candidates_to_drop, n_subset, n_models, ensemble_aggregator) [412](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:412) warnings.filterwarnings(action, category=LinAlgWarning) [413](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:413) warnings.filterwarnings(action, category=UserWarning) --> [414](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:414) self.model.fit(x, x_dot) [416](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:416) # New version of sklearn changes attribute name [417](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/pysindy.py:417) if float(__version__[:3]) >= 1.0: File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:402](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:402), in Pipeline.fit(self, X, y, **fit_params) [376](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:376) """Fit the model. [377](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:377) [378](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:378) Fit all the transformers one after the other and transform the (...) [399](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:399) Pipeline with fitted steps. [400](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:400) """ [401](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:401) fit_params_steps = self._check_fit_params(**fit_params) --> [402](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:402) Xt = self._fit(X, y, **fit_params_steps) [403](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:403) with _print_elapsed_time("Pipeline", self._log_message(len(self.steps) - 1)): [404](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:404) if self._final_estimator != "passthrough": File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:360](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:360), in Pipeline._fit(self, X, y, **fit_params_steps) [358](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:358) cloned_transformer = clone(transformer) [359](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:359) # Fit or load from cache the current transformer --> [360](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:360) X, fitted_transformer = fit_transform_one_cached( [361](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:361) cloned_transformer, [362](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:362) X, [363](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:363) y, [364](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:364) None, [365](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:365) message_clsname="Pipeline", [366](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:366) message=self._log_message(step_idx), [367](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:367) **fit_params_steps[name], [368](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:368) ) [369](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:369) # Replace the transformer of the step with the fitted [370](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:370) # transformer. This is necessary when loading the transformer [371](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:371) # from the cache. [372](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:372) self.steps[step_idx] = (name, fitted_transformer) File [c:\Users\sunan\miniconda3\lib\site-packages\joblib\memory.py:349](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:349), in NotMemorizedFunc.__call__(self, *args, **kwargs) [348](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:348) def __call__(self, *args, **kwargs): --> [349](file:///C:/Users/sunan/miniconda3/lib/site-packages/joblib/memory.py:349) return self.func(*args, **kwargs) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\pipeline.py:894](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:894), in _fit_transform_one(transformer, X, y, weight, message_clsname, message, **fit_params) [892](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:892) with _print_elapsed_time(message_clsname, message): [893](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:893) if hasattr(transformer, "fit_transform"): --> [894](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:894) res = transformer.fit_transform(X, y, **fit_params) [895](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:895) else: [896](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/pipeline.py:896) res = transformer.fit(X, y, **fit_params).transform(X) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\base.py:851](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:851), in TransformerMixin.fit_transform(self, X, y, **fit_params) [848](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:848) return self.fit(X, **fit_params).transform(X) [849](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:849) else: [850](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:850) # fit method of arity 2 (supervised transformation) --> [851](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/base.py:851) return self.fit(X, y, **fit_params).transform(X) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\base.py:191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191), in x_sequence_or_item..func(self, x, *args, **kwargs) [189](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:189) if isinstance(x, Sequence): [190](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:190) xs = [AxesArray(xi, comprehend_axes(xi)) for xi in x] --> [191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191) result = wrapped_func(self, xs, *args, **kwargs) [192](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:192) if isinstance(result, Sequence): # e.g. transform() returns x [193](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:193) return [AxesArray(xp, comprehend_axes(xp)) for xp in result] File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\generalized_library.py:267](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:267), in GeneralizedLibrary.transform(self, x_full) [264](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:264) if i < self.inputs_per_library_.shape[0]: [265](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:265) if i not in self.exclude_libs_: [266](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:266) xps.append( --> [267](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:267) lib.transform( [268](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:268) [x[..., np.unique(self.inputs_per_library_[i, :])]] [269](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:269) )[0] [270](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:270) ) [271](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:271) else: [272](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/generalized_library.py:272) xps.append(lib.transform([x])[0]) File [c:\Users\sunan\miniconda3\lib\site-packages\sklearn\utils\_set_output.py:142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142), in _wrap_method_output..wrapped(self, X, *args, **kwargs) [140](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:140) @wraps(f) [141](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:141) def wrapped(self, X, *args, **kwargs): --> [142](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:142) data_to_wrap = f(self, X, *args, **kwargs) [143](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:143) if isinstance(data_to_wrap, tuple): [144](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:144) # only wrap the first output for cross decomposition [145](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:145) return ( [146](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:146) _wrap_data_with_container(method, data_to_wrap[0], X, self), [147](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:147) *data_to_wrap[1:], [148](file:///C:/Users/sunan/miniconda3/lib/site-packages/sklearn/utils/_set_output.py:148) ) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\base.py:191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191), in x_sequence_or_item..func(self, x, *args, **kwargs) [189](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:189) if isinstance(x, Sequence): [190](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:190) xs = [AxesArray(xi, comprehend_axes(xi)) for xi in x] --> [191](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:191) result = wrapped_func(self, xs, *args, **kwargs) [192](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:192) if isinstance(result, Sequence): # e.g. transform() returns x [193](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/base.py:193) return [AxesArray(xp, comprehend_axes(xp)) for xp in result] File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\feature_library\custom_library.py:230](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:230), in CustomLibrary.transform(self, x_full) [226](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:226) for f in self.functions: [227](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:227) for c in self._combinations( [228](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:228) n_input_features, f.__code__.co_argcount, self.interaction_only [229](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:229) ): --> [230](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:230) xp[..., library_idx] = f(*[x[..., j] for j in c]) [231](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:231) library_idx += 1 [233](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/feature_library/custom_library.py:233) xp = AxesArray(xp, comprehend_axes(xp)) Cell In[14], [line 8](vscode-notebook-cell:?execution_count=14&line=8) [5](vscode-notebook-cell:?execution_count=14&line=5) # identity_lib = ps.IdentityLibrary() [6](vscode-notebook-cell:?execution_count=14&line=6) poly_lib = ps.PolynomialLibrary(degree=1) [7](vscode-notebook-cell:?execution_count=14&line=7) lib_func = [lambda vx: 1/vx, ----> [8](vscode-notebook-cell:?execution_count=14&line=8) lambda vx: 1/vx^2] [9](vscode-notebook-cell:?execution_count=14&line=9) lib_func_names = [lambda vx: '1/(vx= '+vx+')', [10](vscode-notebook-cell:?execution_count=14&line=10) lambda vx: '1/(vx= '+vx+')^2'] [12](vscode-notebook-cell:?execution_count=14&line=12) custom_lib = ps.CustomLibrary(library_functions=lib_func, [13](vscode-notebook-cell:?execution_count=14&line=13) function_names=lib_func_names) File [c:\Users\sunan\miniconda3\lib\site-packages\numpy\lib\mixins.py:21](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:21), in _binary_method..func(self, other) [19](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:19) if _disables_array_ufunc(other): [20](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:20) return NotImplemented ---> [21](file:///C:/Users/sunan/miniconda3/lib/site-packages/numpy/lib/mixins.py:21) return ufunc(self, other) File [c:\Users\sunan\miniconda3\lib\site-packages\pysindy\utils\axes.py:83](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:83), in AxesArray.__array_ufunc__(self, ufunc, method, out, *inputs, **kwargs) [81](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:81) else: [82](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:82) outputs = (None,) * ufunc.nout ---> [83](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:83) results = super().__array_ufunc__(ufunc, method, *args, **kwargs) [84](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:84) if results is NotImplemented: [85](file:///C:/Users/sunan/miniconda3/lib/site-packages/pysindy/utils/axes.py:85) return NotImplemented TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' ``` <\details>
SunandanAdhikary commented 6 months ago

@Jacob-Stevens-Haas Is this an error from my end, or is there an issue with the library?

Jacob-Stevens-Haas commented 5 months ago

When you typed

lib_func = [lambda vx: 1/vx,
            lambda vx: 1/vx^2]

Did you mean to do bitwise XOR (^) or exponentiation (**)? Bitwise XOR isn't supported for floats.

I'm going to assume exponentiation, but there's still another error. The SINDy object needs feature names for both the state variables and control variables. Thus,

model = ps.SINDy(feature_names=states, ...

should be:

model = ps.SINDy(feature_names=states + inputs, ...)

Correcting this and the exponentiation gives:

(beta)' = -0.335 1 + 0.209 beta + -0.536 r + 0.620 delta
(r)' = 0.105 1 + 0.539 beta + -0.280 delta
Jacob-Stevens-Haas commented 5 months ago

So not specifically a bug, but our documentation of the feature_names argument really should call out that it needs to handle state and control.

Also, if the change suggested in #387 is approved, this may be clearer.

SunandanAdhikary commented 5 months ago

Thanks, it runs without any error after adding inputs in feature_names.