nlsq.config module¶
Configuration management and environment setup.
Central configuration management for NLSQ package.
- class nlsq.config.MemoryConfig(memory_limit_gb=8.0, gpu_memory_fraction=None, chunk_size_mb=None, out_of_memory_strategy='fallback', safety_factor=0.8, auto_chunk_threshold_gb=4.0, progress_reporting=True, min_chunk_size=1000, max_chunk_size=1000000)[source]
Bases:
objectConfiguration for memory management and GPU settings.
- memory_limit_gb
Maximum memory limit in GB (default: 8.0)
- Type:
- gpu_memory_fraction
Fraction of GPU memory to use (0.0-1.0, None for automatic)
- Type:
float | None
- chunk_size_mb
Default chunk size in MB for data processing
- Type:
int | None
- out_of_memory_strategy
Strategy when out of memory: ‘fallback’, ‘reduce’, ‘error’
- Type:
- safety_factor
Safety factor for memory calculations (0.0-1.0)
- Type:
- auto_chunk_threshold_gb
Automatically enable chunking above this memory threshold
- Type:
- progress_reporting
Enable progress reporting for large operations
- Type:
- min_chunk_size
Minimum chunk size in data points
- Type:
- max_chunk_size
Maximum chunk size in data points
- Type:
- memory_limit_gb: float
- out_of_memory_strategy: str
- safety_factor: float
- auto_chunk_threshold_gb: float
- progress_reporting: bool
- min_chunk_size: int
- max_chunk_size: int
- __post_init__()[source]
Validate configuration values.
- __init__(memory_limit_gb=8.0, gpu_memory_fraction=None, chunk_size_mb=None, out_of_memory_strategy='fallback', safety_factor=0.8, auto_chunk_threshold_gb=4.0, progress_reporting=True, min_chunk_size=1000, max_chunk_size=1000000)
- class nlsq.config.LargeDatasetConfig(enable_automatic_solver_selection=True, solver_selection_thresholds=<factory>)[source]
Bases:
objectConfiguration for large dataset processing.
- enable_automatic_solver_selection
Automatically select optimal solver based on dataset size
- Type:
Notes
As of v0.2.0, all subsampling parameters have been removed. Use streaming optimization instead for unlimited datasets. See MIGRATION_V0.2.0.md for migration instructions.
- enable_automatic_solver_selection: bool
- __post_init__()[source]
Validate configuration values.
- __init__(enable_automatic_solver_selection=True, solver_selection_thresholds=<factory>)
- class nlsq.config.JAXConfig[source]
Bases:
objectSingleton configuration manager for JAX and memory settings.
This class ensures that JAX configuration is set once and consistently across all NLSQ modules, avoiding duplicate configuration calls. It also manages memory settings and large dataset configuration.
- static __new__(cls)[source]
Ensure singleton pattern (thread-safe).
- __init__()[source]
Initialize JAX and memory configuration if not already done.
- classmethod enable_x64(enable=True)[source]
Enable or disable 64-bit precision.
- Parameters:
enable (bool, optional) – If True, enable 64-bit precision. If False, use 32-bit. Default is True.
- classmethod is_x64_enabled()[source]
Check if 64-bit precision is enabled.
- Returns:
True if 64-bit precision is enabled, False otherwise.
- Return type:
- classmethod precision_context(use_x64)[source]
Context manager for temporarily changing precision.
- Parameters:
use_x64 (bool) – If True, use 64-bit precision within context. If False, use 32-bit precision.
Examples
>>> with JAXConfig.precision_context(use_x64=False): ... # Code here runs with 32-bit precision ... result = some_computation() >>> # Back to previous precision setting
- classmethod get_memory_config()[source]
Get the current memory configuration.
- Returns:
Current memory configuration
- Return type:
MemoryConfig
- classmethod set_memory_config(config)[source]
Set the memory configuration.
- Parameters:
config (MemoryConfig) – New memory configuration
- classmethod get_large_dataset_config()[source]
Get the current large dataset configuration.
- Returns:
Current large dataset configuration
- Return type:
LargeDatasetConfig
- classmethod set_large_dataset_config(config)[source]
Set the large dataset configuration.
- Parameters:
config (LargeDatasetConfig) – New large dataset configuration
- classmethod memory_context(memory_config)[source]
Context manager for temporarily changing memory configuration.
- Parameters:
memory_config (MemoryConfig) – Temporary memory configuration
Examples
>>> from nlsq.config import JAXConfig, MemoryConfig >>> temp_config = MemoryConfig(memory_limit_gb=16.0) >>> with JAXConfig.memory_context(temp_config): ... # Code here runs with increased memory limit ... result = fit_large_dataset(func, x, y) >>> # Back to previous memory settings
- classmethod large_dataset_context(large_dataset_config)[source]
Context manager for temporarily changing large dataset configuration.
- Parameters:
large_dataset_config (LargeDatasetConfig) – Temporary large dataset configuration
- nlsq.config.enable_x64(enable=True)[source]
Enable or disable 64-bit precision.
- Parameters:
enable (bool, optional) – If True, enable 64-bit precision. If False, use 32-bit. Default is True.
- nlsq.config.is_x64_enabled()[source]
Check if 64-bit precision is enabled.
- Returns:
True if 64-bit precision is enabled, False otherwise.
- Return type:
- nlsq.config.precision_context(use_x64)[source]
Context manager for temporarily changing precision.
- Parameters:
use_x64 (bool) – If True, use 64-bit precision within context. If False, use 32-bit precision.
Examples
>>> from nlsq.config import precision_context >>> with precision_context(use_x64=False): ... # Code here runs with 32-bit precision ... result = some_computation() >>> # Back to previous precision setting
- nlsq.config.get_memory_config()[source]
Get the current memory configuration.
- Returns:
Current memory configuration
- Return type:
MemoryConfig
- nlsq.config.set_memory_limits(memory_limit_gb, gpu_memory_fraction=None, safety_factor=0.8)[source]
Set memory limits for NLSQ operations.
- Parameters:
Examples
>>> from nlsq.config import set_memory_limits >>> # Set 16GB memory limit with 80% GPU memory usage >>> set_memory_limits(16.0, gpu_memory_fraction=0.8)
- nlsq.config.configure_for_large_datasets(memory_limit_gb=8.0, enable_chunking=True, progress_reporting=True)[source]
Configure NLSQ for optimal large dataset performance.
This function sets up memory management, chunking, streaming, and other settings for handling large datasets efficiently.
- Parameters:
Notes
All large datasets use streaming optimization for 100% data utilization.
Examples
>>> from nlsq.config import configure_for_large_datasets >>> # Configure for large datasets with 16GB memory limit >>> configure_for_large_datasets( ... memory_limit_gb=16.0, ... progress_reporting=True ... )
- nlsq.config.get_large_dataset_config()[source]
Get the current large dataset configuration.
- Returns:
Current large dataset configuration
- Return type:
LargeDatasetConfig
- nlsq.config.memory_context(memory_config)[source]
Context manager for temporarily changing memory configuration.
- Parameters:
memory_config (MemoryConfig) – Temporary memory configuration
Examples
>>> from nlsq.config import memory_context, MemoryConfig >>> temp_config = MemoryConfig(memory_limit_gb=16.0) >>> with memory_context(temp_config): ... # Code here runs with increased memory limit ... result = fit_large_dataset(func, x, y) >>> # Back to previous memory settings
- nlsq.config.large_dataset_context(large_dataset_config)[source]
Context manager for temporarily changing large dataset configuration.
- Parameters:
large_dataset_config (LargeDatasetConfig) – Temporary large dataset configuration
Examples
>>> from nlsq.config import large_dataset_context, LargeDatasetConfig >>> temp_config = LargeDatasetConfig(enable_automatic_solver_selection=True) >>> with large_dataset_context(temp_config): ... # Code here uses automatic solver selection ... result = fit_large_dataset(func, x, y)
- nlsq.config.get_jacobian_mode()[source]
Get Jacobian mode from configuration sources.
Configuration precedence (highest to lowest): 1. Environment variable (NLSQ_JACOBIAN_MODE) 2. Config file (~/.nlsq/config.json) 3. Auto-default
- Returns:
mode (str) – Jacobian mode (‘auto’, ‘fwd’, or ‘rev’)
source (str) – Source of the configuration (‘environment variable’, ‘config file’, ‘auto-default’)
- Return type:
Examples
>>> from nlsq.config import get_jacobian_mode >>> mode, source = get_jacobian_mode() >>> print(f"Using {mode} mode from {source}") Using auto mode from auto-default
Notes
Valid jacobian_mode values: - ‘auto’: Automatically select based on problem dimensions - ‘fwd’: Force forward-mode automatic differentiation (jacfwd) - ‘rev’: Force reverse-mode automatic differentiation (jacrev)
- nlsq.config.set_jacobian_mode(mode)[source]
Set Jacobian mode via environment variable.
This sets the NLSQ_JACOBIAN_MODE environment variable for the current process. To persist the setting, use a config file at ~/.nlsq/config.json.
- Parameters:
mode (str) – Jacobian mode (‘auto’, ‘fwd’, or ‘rev’)
- Raises:
ValueError – If mode is not one of ‘auto’, ‘fwd’, ‘rev’
Examples
>>> from nlsq.config import set_jacobian_mode >>> set_jacobian_mode('rev') # Force reverse-mode AD for all fits