GithubHelp home page GithubHelp logo

google / temporian Goto Github PK

View Code? Open in Web Editor NEW
653.0 12.0 43.0 58.4 MB

Temporian is an open-source Python library for preprocessing โšก and feature engineering ๐Ÿ›  temporal data ๐Ÿ“ˆ for machine learning applications ๐Ÿค–

Home Page: https://temporian.readthedocs.io

License: Apache License 2.0

Starlark 7.14% Python 87.62% C++ 4.16% Shell 0.47% C 0.06% HTML 0.41% Batchfile 0.14%
python cpp feature-engineering temporal-data time-series

temporian's Introduction

Temporian logo

pypi docs tests formatting publish

Temporian is a library for safe, simple and efficient preprocessing and feature engineering of temporal data in Python. Temporian supports multivariate time-series, multivariate time-sequences, event logs, and cross-source event streams.

Temporian is to temporal data what Pandas is to tabular data.

Key features

  • Supports most types of temporal data ๐Ÿ“ˆ: Handles both uniformly sampled and non-uniformly sampled data, both single-variate and multivariate data, both flat and multi-index data, and both mono-source and multi-source non-synchronized events.

  • Optimized for Temporal data ๐Ÿ”ฅ: Temporian's core computation is implemented in C++ and optimized for temporal data. Temporian can be more than 1,000x faster than off-the-shelf data processing libraries when operating on temporal data.

  • Easy to integrate into an existing ML ecosystem: Temporian does not perform any ML model training - instead it integrates seamlessly with any ML library, such as PyTorch, Scikit-Learn, Jax, TensorFlow, XGBoost, or Yggdrasil Decision Forests.

  • Prevents unwanted future leakage ๐Ÿ˜ฐ: Unless explicitly specified with tp.leak, feature computation cannot depend on future data, thereby preventing unwanted, hard-to-debug, and potentially costly future leakage.

Quickstart

Installation

Install Temporian from PyPI with pip:

pip install temporian -U

Temporian is currently available for Linux and MacOS (ARM and Intel). Windows support is under development.

Minimal example

Consider sale records that contain contain the timestamp, store, and revenue of individual sales.

$ cat sales.csv
timestamp,store,revenue
2023-12-04 21:21:05,STORE_31,5071
2023-11-08 17:14:38,STORE_4,1571
2023-11-29 21:44:46,STORE_49,6101
2023-12-20 18:17:14,STORE_18,4499
2023-12-15 10:55:09,STORE_2,6666
...

Our goal is to compute the sum of revenue for each store at 11 pm every weekday (excluding weekends).

First, we load the data and list the workdays.

import temporian as tp

# Load sale transactions
sales = tp.from_csv("sales.csv")

# Index sales per store
sales_per_store = sales.add_index("store")

# List work days
days = sales_per_store.tick_calendar(hour=22)
work_days = (days.calendar_day_of_week() <= 5).filter()

work_days.plot(max_num_plots=1)

Then, we sum the daily revenue for each workday and each store.

# Aggregate revenue per store and per work day
daily_revenue = sales_per_store["revenue"].moving_sum(tp.duration.days(1), sampling=work_days).rename("daily_revenue")

# Plot the results
daily_revenue.plot(max_num_plots=3)

Finally, we can export the result as a Pandas DataFrame for further processing or for consumption by other libraries.

tp.to_pandas(daily_revenue)

Check the Getting Started tutorial to find out more!

Next steps

New users should refer to the Getting Started guide, which provides a quick overview of the key concepts and operations of Temporian.

After that, visit the User Guide for a deep dive into the major concepts, operators, conventions, and practices of Temporian. For a hands-on learning experience, work through the Tutorials or refer to the API reference.

If you need help, have a question, want to contribute, or just want to be a part of the Temporian community, we encourage you to join our Discord server! ๐Ÿค๐Ÿผ

Documentation

The documentation ๐Ÿ“š is available at temporian.readthedocs.io. The Getting Started guide is the best way to start.

Contributing

Contributions to Temporian are welcome! Check out the Contributing guide to get started.

Credits

Temporian is developed in collaboration between Google and Tryolabs.

temporian's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

temporian's Issues

Convert methods to `property` where appropiate

Methods with no arguments that just return a value from the class' internal state should be made properties via the @property decorator. This makes the syntax cleaner when calling the getter and makes it clear that the method is just returning one of the class' values.

We can additionally use the @property.setter where applicable.

Examples:

  • core sampling: index, creator, set_creator
  • core feature: name, dtype, sampling, creator, set_sampling, set_creator
    etc.

DTypes in Arithmetic Operator

Numpy has a feature called type promotion which states that the dtype of the result of the sum of two arrays will be the one with the greater resolution. We can check beforehand the expected dtype with the following numpy function https://numpy.org/doc/stable/reference/generated/numpy.result_type.html. However, I'm not sure how we can decide this in the core if we do not have the information yet. We could enforce that all results are float64 but I'm not sure if that's the best option. Any comments @achoum @getchebarne

Originally posted by @diegomarvid in #24 (comment)

Apparently, we know the dtype in feature.dtype(). However, this is a variable that refers to a string in core/data/dtype.py. We need a function that knows how to order these types based on resolution to apply type promotion correctly.

Currently, we enforce that the types of both features must be equal, if not we raise an error.

Compiling Temporian on Windows -- Building wheel for temporian (pyproject.toml) ... error

Building wheels for collected packages: temporian
  Building wheel for temporian (pyproject.toml) ... error
  error: subprocess-exited-with-error

  ร— Building wheel for temporian (pyproject.toml) did not run successfully.
  โ”‚ exit code: 1
  โ•ฐโ”€> [57 lines of output]
      fatal: not a git repository (or any of the parent directories): .git
      A setup.py file already exists. Using it.
      running build
      running bazel_build
      Traceback (most recent call last):
        File "C:\Users\xxzz\AppData\Local\Temp\pip-install-mfsrqwoh\temporian_7928305007e042308ed74670d834944b\setup.py", line 80, in <module>
          setup(**setup_kwargs)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 185, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 201, in run_commands
          dist.run_commands()
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\dist.py", line 963, in run_command
          super().run_command(command)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 988, in run_command
          cmd_obj.run()
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\command\build.py", line 131, in run
          self.run_command(cmd_name)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 318, in run_command
          self.distribution.run_command(command)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\dist.py", line 963, in run_command
          super().run_command(command)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 987, in run_command
          cmd_obj.ensure_finalized()
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 111, in ensure_finalized
          self.finalize_options()
        File "C:\Users\xxzz\AppData\Local\Temp\pip-install-mfsrqwoh\temporian_7928305007e042308ed74670d834944b\config\build.py", line 57, in finalize_options
          raise RuntimeError(
      RuntimeError: Could not find "bazel" binary. Please visit https://docs.bazel.build/versions/master/install.html for installation instruction.
      Traceback (most recent call last):
        File "C:\Users\xxzz\anaconda3\envs\quant\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
          main()
        File "C:\Users\xxzz\anaconda3\envs\quant\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\xxzz\anaconda3\envs\quant\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\poetry\core\masonry\api.py", line 58, in build_wheel
          return WheelBuilder.make_in(
                 ^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\poetry\core\masonry\builders\wheel.py", line 88, in make_in
          wb.build(target_dir=directory)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\poetry\core\masonry\builders\wheel.py", line 121, in build
          self._build(zip_file)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\poetry\core\masonry\builders\wheel.py", line 182, in _build
          self._run_build_command(setup)
        File "C:\Users\xxzz\AppData\Local\Temp\pip-build-env-odk8ya52\overlay\Lib\site-packages\poetry\core\masonry\builders\wheel.py", line 250, in _run_build_command
          subprocess.check_call(
        File "C:\Users\xxzz\anaconda3\envs\quant\Lib\subprocess.py", line 413, in check_call
          raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command '['C:/Users/xxzz/anaconda3/envs/quant/python.exe', 'C:\\Users\\xxzz\\AppData\\Local\\Temp\\pip-install-mfsrqwoh\\temporian_7928305007e042308ed74670d834944b\\setup.py', 'build', '-b', 'C:\\Users\\xxzz\\AppData\\Local\\Temp\\pip-install-mfsrqwoh\\temporian_7928305007e042308ed74670d834944b\\build', '--build-purelib', 'C:\\Users\\xxzz\\AppData\\Local\\Temp\\pip-install-mfsrqwoh\\temporian_7928305007e042308ed74670d834944b\\build\\lib', '--build-platlib', 'C:\\Users\\xxzz\\AppData\\Local\\Temp\\pip-install-mfsrqwoh\\temporian_7928305007e042308ed74670d834944b\\build\\lib.win-amd64-cpython-311']' returned non-zero exit status 1.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for temporian
Failed to build temporian
ERROR: Could not build wheels for temporian, which is required to install pyproject.toml-based projects

Do I need to install Bazel on windows 11? (put bazel.exe in PATH. same error)
python 3.11

New operators: trigonometric functions

New trigonometric function operators: EventSet.sin(), .cos(), .tan(), .arcsin(), .arccos(), .arctan().

Implementation should be factored with base classes so that each operation only needs to define the numpy method it needs to call.

Can possibly be implemented by extending temporian/core/operators/unary.py.

See numpy's definitions of these functions for reference. cos for example.

See https://github.com/google/temporian/blob/main/CONTRIBUTING.md#developing-a-new-operator for guidance.

Questions or requests for additional guidance from possible contributors more than welcome!

Remove Indexing in DataFrame <-> NumpyEvent

Having the indexing logic is great. However, would it make sense to move this logic to the "addIndex" (or something similar) operator instead?

To speed-up the work, you can submit this PR as it is, and maybe make the move in another PR.

Originally posted by @achoum in #23 (comment)

Feature: `tp.from_polars` and `tp.to_polars`

Functions for creating an EventSet from a Polars DataFrame (tp.from_polars()) and dumping an EventSet into a Polars DataFrame (tp.to_polars()). See tp.from_pandas() and tp.to_pandas() for reference.

Questions or requests for additional guidance from possible contributors more than welcome!

Handle Categoricals

We should think of a way to handle categoricals as inputs for the dataframe. Only converting them to int (cat.codes) may not be enough because there are certain operators that don't make sense (sum, sma). A better option would be to add a dtype for categorical and handle the type separately.

New operators: min, max

New EventSet.max() and EventSet.min() operators.

They return a single-event EventSet with each feature's max value, associated to the last event's timestamp in the original EventSet.

To be implemented as aliases to evset.moving_max(np.inf).end() and evset.moving_min(np.inf).end().

See https://github.com/google/temporian/blob/main/CONTRIBUTING.md#developing-a-new-operator for guidance.

Questions or requests for additional guidance from possible contributors more than welcome!

Feature: tp.from_hdf and tp.to_hdf

Functions for creating an EventSet from an HDF5 file (tp.from_hdf()) and dumping an EventSet into an HDF5 file (tp.to_hdf()). See tp.from_csv() and tp.to_csv() for reference.

Questions or requests for additional guidance from possible contributors more than welcome!

Sorting of `to_numpy` and `to_pandas`

These functions are not enforcing a specific sorting as discussed in #378.

Sorting by timestamp makes the most sense (IMO) but there is a case for sorting by index and then timestamp.

In [6]: evset = tp.event_set(
   ...:     timestamps=['2023-11-08T17:14:38', '2023-11-29T21:44:46'],
   ...:     features={
   ...:         "my_index": [1, 0],
   ...:     },
   ...:     indexes=["my_index"],
   ...: )
   ...: tp.to_pandas(evset)
Out[6]:
   my_index           timestamp
0         0 2023-11-29 21:44:46
1         1 2023-11-08 17:14:38

In [7]: evset = tp.event_set(
   ...:     timestamps=['2023-11-08T17:14:38', '2023-11-29T21:44:46'],
   ...:     features={
   ...:         "my_index": [0, 1],
   ...:     },
   ...:     indexes=["my_index"],
   ...: )
   ...: tp.to_pandas(evset)
Out[7]:
   my_index           timestamp
0         1 2023-11-29 21:44:46
1         0 2023-11-08 17:14:38

Not able to test temporian on Mac OS M2 chip

When I tried to install temporian packages with poetry, there was a problem with TensorFlow installation.

Error:

  RuntimeError

  Unable to find installation candidates for tensorflow (2.12.0)

  at /opt/homebrew/Cellar/poetry/1.7.1/libexec/lib/python3.12/site-packages/poetry/installation/chooser.py:73 in choose_for
       69โ”‚ 
       70โ”‚             links.append(link)
       71โ”‚ 
       72โ”‚         if not links:
    โ†’  73โ”‚             raise RuntimeError(f"Unable to find installation candidates for {package}")
       74โ”‚ 
       75โ”‚         # Get the best link
       76โ”‚         chosen = max(links, key=lambda link: self._sort_key(package, link))
       77โ”‚ 

Cannot install tensorflow.

Env:
MAC OS - Ventura 13.1
Python 3.11

Did anyone faced this issue before?

Add `__eq__` to core Events

Short hand to use tp.equal(...) or tp.equal_scalar(...). It would be intuitive since all other arithmetic operators have their magic.

Build error at pip install - Mac Intel

Building wheels for collected packages: temporian
Building wheel for temporian (pyproject.toml) ... error
error: subprocess-exited-with-error

ร— Building wheel for temporian (pyproject.toml) did not run successfully.
โ”‚ exit code: 1
โ•ฐโ”€> [56 lines of output]
fatal: not a git repository (or any of the parent directories): .git
A setup.py file already exists. Using it.
running build
running bazel_build

I saw there was a similar issue reported earlier but couldnt find anywhere the steps to resolve. Any chance there are anywhere some steps to follow to resolve?
Mac Intel, Python 3.10

Feature: tp.to_numpy()

Export an EventSet to numpy arrays with tp.to_numpy(evset).

See tp.to_pandas() for reference.

The EventSet is flattened (its index is dropped and kept as features, with .drop_index(keep=True)). Returns a dictionary mapping feature names to values, + an extra "timestamps" key with the timestamps.

Provide timestamps: bool = True and timestamp_to_datetime: bool = True arguments (same as in tp.to_pandas())

This needs to be tested thoroughly, see temporian/io/test/pandas_test.py for reference.

Example:

evset = tp.event_set(
    timestamps=[0, 1, 2, 3],
    features={
        "a": ["A", "B", "A", "B"],
        "b": [4, 5, 6, 7],
    },
    indexes=["a"],
)

res = tp.to_numpy(evset)
res
{
    "timestamps": [0, 1, 2, 3],
    "a": ["A", "B", "A", "B"],
    "b": [4, 6, 5, 7],
}

Extend EventSet's >, <, >=, <= to work with string literals

  • EventSet < EventSet works with two numerical EventSets
  • EventSet < int works with a numerical EventSet
  • EventSet < EventSet works with two string EventSets
  • EventSet < str doesn't work with a string EventSet, and it should:
In [1]: import temporian as tp

In [2]: evset = tp.event_set([1], features={'a': [3]})

In [3]: evset < 4
Out[3]:
indexes: []
features: [('a', bool_)]
events:
     (1 events):
        timestamps: [1.]
        'a': [ True]
memory usage: 0.5 kB

In [4]: evset = tp.event_set([1], features={'a': ['a']})

In [5]: evset < 'b'
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[8], line 1
----> 1 evset < 'b'

File ~/temporian/temporian/core/event_set_ops.py:1233, in EventSetOperations.__lt__(self, other)
   1229     from temporian.core.operators.scalar import less_scalar
   1231     return less_scalar(input=self, value=other)
-> 1233 self._raise_error("compare", other, "(int,float)")
   1234 assert False

File ~/temporian/temporian/core/event_set_ops.py:88, in EventSetOperations._raise_error(self, op_name, other, allowed_types)
     80 def _raise_error(
     81     self, op_name: str, other: Any, allowed_types: str
     82 ) -> None:
     83     """Raises an error message.
     84
     85     This utility method is used in operator implementations, e.g., +, - *.
     86     """
---> 88     raise ValueError(
     89         f"Cannot use operator '{op_name}' on {self._clsname} and"
     90         f" {type(other)} objects. Only {self._clsname} or values of type"
     91         f" ({allowed_types}) are supported."
     92     )

ValueError: Cannot use operator 'compare' on EventSet and <class 'str'> objects. Only EventSet or values of type ((int,float)) are supported.

Same goes for all other comparison ops.

The T_SCALAR tuple defined in temporian/core/event_set_ops.py only accounts for (int, float), but in some ops it should include str too. A second tuple needs to be defined for it and used where appropiate.

Note that equal and __ne__ in the same file use T_SCALAR + (bool, str), which could be defined as a third option.

Thorough tests needed to ensure we are accepting and rejecting the correct type on each op.

Suggestion : Documentation Suggestion

Suggestions

Hi, I have experienced some problems with doc. Therefore, I am writing this issue. Firstiful, I think I must give information about myself so, you can identify which type of people having problems on docs.

I am an undergrad and I am trying to help OSS. I have not strong knowledge of various development tools as expected from an undergrad. I know a little bit pytest and unittest modules, and I know algorithms and python .

As You can understand workflow and testing-flow can be challenging with various tools. I think this problem can be passed with the simplified flow at the current situation of docs (you must understand basel etc. by yourself) and it is not welcoming for beginners like me and workflow, testing-flow docs are short. If I have more time, I would like to learn and contribute but, I have not such time.

My suggestions

  • Workflow and testing-flow simplification

  • More docs about workflow and testing-flow




Thank you for listening me. Have a nice day โค๏ธ OSS โค๏ธ




New operators: round, floor, ceil

New operators for floats: EventSet.round(), .floor(), .ceil().

Implementation should be factored with base classes so that each operation only needs to define the numpy method it needs to call.

Return same type as received, since floats have a much larger range than ints.

Can possibly be implemented by extending temporian/core/operators/unary.py.

See https://github.com/google/temporian/blob/main/CONTRIBUTING.md#developing-a-new-operator for guidance.

Questions or requests for additional guidance from possible contributors more than welcome!

Automatic Conversion of Pandas Object to Datetime for Timestamps in Eventset Creation

In the process of creating an eventset from a Pandas DataFrame, an issue arises when timestamps are stored as Pandas objects, making it necessary to convert them to datetime format before further processing. To streamline this workflow and enhance user experience, we propose an automatic conversion mechanism that detects the datatype of the timestamp column:

If the Timestamp Column is Pandas Object:
Automatically convert the column to datetime format, ensuring compatibility for eventset creation. This alleviates the need for users to manually handle datatype conversions.

If the Timestamp Column is Already in Datetime:
Retain the existing datetime format, maintaining consistency for users who have already prepared their data accordingly.

Steps to Reproduce:

  1. Create a Pandas DataFrame with a timestamp column stored as a Pandas object.
  2. Attempt to create an temporian eventset using the timestamp column.
  3. Observe the need for manual conversion from object to datetime datatype.

can be done for other io format as well

New operators: bitwise int operations

New EventSet.and(), EventSet.or(), EventSet.xor(), EventSet.invert(), EventSet.left_shift(), EventSet.right_shift() operators that implement bitwise operations on integer types, with their corresponding magics: &, |, ^, ~, <<, >>.

and() and or() and invert() are already implemented for bool and need to be extended to work with ints.

Implementation should be factored with base classes so that each operation only needs to define the numpy method it needs to call.

See https://github.com/google/temporian/blob/main/CONTRIBUTING.md#developing-a-new-operator for guidance.

Questions or requests for additional guidance from possible contributors more than welcome!

Feature Request: Moving Quantile Window Operator

As you might expect, moving quantiles are particularly slow by their nature. Standard python (e.g. Pandas, numpy) libraries offer moving/rolling/expanding quantiles but these are often slow and scale very poorly to 100,000 of data points.

Temporian seems like the perfect place to introduce both language specific speed-ups in C++ but also algorithmically superior operations. Here are some examples:
Heap based moving median: https://aakinshin.net/posts/partitioning-heaps-quantile-estimator/

Approximate moving median:
https://aakinshin.net/posts/mp2-quantile-estimator/
https://aakinshin.net/posts/partitioning-heaps-quantile-estimator2/

Build error "The 'run' command is only supported from within a workspace (below a directory having a WORKSPACE file)" - Mac M1/Sonoma

(...)
Building wheels for collected packages: temporian
Building wheel for temporian (pyproject.toml) ... error
error: subprocess-exited-with-error

ร— Building wheel for temporian (pyproject.toml) did not run successfully.
โ”‚ exit code: 1
โ•ฐโ”€> [60 lines of output]
fatal: not a git repository (or any of the parent directories): .git
A setup.py file already exists. Using it.
running build
running bazel_build
WARNING: Invoking Bazel in batch mode since it is not invoked from within a workspace (below a directory having a WORKSPACE file).
ERROR: The 'run' command is only supported from within a workspace (below a directory having a WORKSPACE file).
See documentation at https://bazel.build/concepts/build-ref#workspace
Traceback (most recent call last):
File "/private/var/folders/n1/dwc4fjhs62xbt_std9ymr3bc0000gn/T/pip-install-bmh2m7yg/temporian_bf6813aa05ee4ca6805a0cd8cb95db2a/setup.py", line 80, in
setup(**setup_kwargs)
File "/opt/homebrew/Cellar/[email protected]/3.11.6/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/setuptools/init.py", line 103, in setup
return distutils.core.setup(**attrs)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.