Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
SunandanAdhikary opened this issue Jan 2, 2024 · 7 comments

Comments

@SunandanAdhikary
Copy link

SunandanAdhikary commented Jan 2, 2024

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_train and u_train are 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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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
Copy link
Author

SunandanAdhikary commented Jan 3, 2024

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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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<lambda>\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.<locals>.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
Copy link
Collaborator

Jacob-Stevens-Haas commented Jan 3, 2024

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
Copy link
Author

SunandanAdhikary commented Jan 3, 2024

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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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.<locals>.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
Copy link
Author

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

@Jacob-Stevens-Haas
Copy link
Collaborator

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
Copy link
Collaborator

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
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants