Skip to content

builtins.slice should be generic #8647

Closed

Description

@randolf-scholz

This is a port of python/typing#159, which was closed as being out of scope, with https://github.com/srittau suggesting it maybe be more suitable for typeshed instead.

It would be useful to have slice being generic and allowing type hints a la

  • slice[start_type, stop_type, step_type]
  • slice[S, T] as shorthand for slice[S, S, T] or slice[S, T, Any]
  • slice[T] as shorthand for slice[T, T, T] or slice[T, T, Any] or slice[Any, T, Any]
  • slice as shorthand for slice[Any, Any, Any]

Syntax wise, I would advocate for the latter options slice[S, T]=slice[S, T, Any], slice[T]=slice[Any, T, Any] for the following reasons:

  1. It resembles the regular usage of slice:
    • slice(x) = slice(None, x, None),
    • slice(a, b) = slice(a, b, None)
  2. It has better compatible with datetime/timedelta variables, which might be a common use-case.
    • slice[datetime]=slice[datetime, datetime, datetime] would be an error, because `datetimes cannot be added, only timedeltas can be added to datetimes.

Real-world examples

  • Datetime based slicing: Here, start and stop are datetime-like and step is timedelta-like (e.g. datetime.datetime / datetime.timedelta, numpy.datetime64/numpy.timedelta64 or pandas.Timestamp/pandas.Timedelta)
  • Label based slicing via strings, for example, pandas allows something like frame.loc["2017-07-01":"2017-10-31"] for a DataFrame that is indexed by a DatetimeIndex, this will first convert the strings to datetime objects and then select all rows of the table that lie between the given dates.
  • Similarly, one might want to select all rows of a table that lie between two float values.

Activity

  1. TeamSpen210 commented on Aug 29, 2022

    @TeamSpen210
    Contributor

    An example of heterogeneous types (although a little cute) is to do obj["keyword": value], effectively producing keyword arguments.

  2. Gobot1234 commented on Sep 13, 2022

    @Gobot1234
    Contributor
  3. AlexWaygood commented on Jul 22, 2023

    @AlexWaygood
    Member

    Marking as deferred until and unless PEP-696 is accepted by the Steering Council and implemented by all major type checkers

  4. lorenzo-w commented on Feb 14, 2024

    @lorenzo-w

    Little status update:

  5. srittau commented on Feb 14, 2024

    @srittau
    Collaborator

    Cf. #11422 for the feature tracker.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: deferredIssue or PR deferred until some precondition is fixed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions