Source code for scitex_core.dt._linspace

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Timestamp: "2025-04-23 10:42:43 (ywatanabe)"
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py
# ----------------------------------------
import os

__FILE__ = "./src/scitex/dt/_linspace.py"
__DIR__ = os.path.dirname(__FILE__)
# ----------------------------------------

from typing import Union, Optional, List, Any
import numpy as np
import datetime
from datetime import timedelta


[docs] def linspace( start_dt: datetime.datetime, end_dt: datetime.datetime, n_samples: Optional[int] = None, sampling_rate: Optional[float] = None, ) -> np.ndarray: """ Create a linearly spaced array between two datetime objects. Args: start_dt: Starting datetime object end_dt: Ending datetime object n_samples: Number of samples to create (mutually exclusive with sampling_rate) sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples) Returns: Array of datetime objects evenly spaced between start_dt and end_dt """ # Type checking if not isinstance(start_dt, datetime.datetime): raise TypeError(f"start_dt must be a datetime object, got {type(start_dt)}") if not isinstance(end_dt, datetime.datetime): raise TypeError(f"end_dt must be a datetime object, got {type(end_dt)}") if n_samples is not None and not isinstance(n_samples, (int, float)): raise TypeError(f"n_samples must be a number, got {type(n_samples)}") if sampling_rate is not None and not isinstance(sampling_rate, (int, float)): raise TypeError(f"sampling_rate must be a number, got {type(sampling_rate)}") if start_dt >= end_dt: raise ValueError("start_dt must be earlier than end_dt") duration_seconds = (end_dt - start_dt).total_seconds() if n_samples is not None and sampling_rate is not None: raise ValueError("Provide either n_samples or sampling_rate, not both") if n_samples is None and sampling_rate is None: raise ValueError("Either n_samples or sampling_rate must be provided") if sampling_rate is not None: if sampling_rate <= 0: raise ValueError("sampling_rate must be positive") n_samples = int(duration_seconds * sampling_rate) + 1 else: if n_samples <= 0: raise ValueError("n_samples must be positive") # Create linear space in seconds seconds_array = np.linspace(0, duration_seconds, n_samples) # Convert to datetime objects datetime_array = np.array( [start_dt + timedelta(seconds=float(sec)) for sec in seconds_array] ) return datetime_array
# #!/usr/bin/env python3 # # -*- coding: utf-8 -*- # # Timestamp: "2025-04-23 10:38:20 (ywatanabe)" # # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py # # ---------------------------------------- # import os # __FILE__ = ( # "./src/scitex/dt/_linspace.py" # ) # __DIR__ = os.path.dirname(__FILE__) # # ---------------------------------------- # import numpy as np # from datetime import timedelta # def linspace(start_dt, end_dt, n_samples=None, sampling_rate=None): # """ # Create a linearly spaced array between two datetime objects. # Args: # start_dt: Starting datetime object # end_dt: Ending datetime object # n_samples: Number of samples to create (mutually exclusive with sampling_rate) # sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples) # Returns: # Array of datetime objects evenly spaced between start_dt and end_dt # """ # duration_seconds = (end_dt - start_dt).total_seconds() # if n_samples is not None and sampling_rate is not None: # raise ValueError("Provide either n_samples or sampling_rate, not both") # if n_samples is None and sampling_rate is None: # raise ValueError("Either n_samples or sampling_rate must be provided") # if sampling_rate is not None: # n_samples = int(duration_seconds * sampling_rate) + 1 # # Create linear space in seconds # seconds_array = np.linspace(0, duration_seconds, n_samples) # # Convert to datetime objects # datetime_array = np.array([start_dt + timedelta(seconds=float(sec)) for sec in seconds_array]) # return datetime_array # # EOF # EOF