CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-pyimagej

Python wrapper for ImageJ2 that provides seamless integration between ImageJ and Python scientific computing ecosystems

Pending
Overview
Eval results
Files

environment-diagnostics.mddocs/

Environment & Diagnostics

Tools for environment configuration, troubleshooting, and system health checks to ensure proper PyImageJ operation. The diagnostics system helps identify and resolve common configuration issues.

Capabilities

System Health Checks

Comprehensive environment analysis to identify potential PyImageJ compatibility issues.

def checkup(output=print):
    """
    Check environment for health problems that could prevent PyImageJ from functioning.
    
    Args:
        output: Function to use for displaying results (default: print)
        
    Analyzes:
        - Python executable and version
        - Java installation and version  
        - Required dependencies and versions
        - Environment variables and paths
        - Known compatibility issues
    """

Usage Examples:

import imagej.doctor

# Run comprehensive checkup with default output
imagej.doctor.checkup()

# Capture checkup results to custom function
results = []
def capture_output(message):
    results.append(message)

imagej.doctor.checkup(output=capture_output)

# Review captured results
for result in results:
    print(f"CHECKUP: {result}")

# Run checkup before ImageJ initialization
imagej.doctor.checkup()
ij = imagej.init()

Debug Logging Configuration

Enable detailed logging for troubleshooting PyImageJ initialization and operation issues.

def debug_to_stderr(logger=None, debug_maven=False):
    """
    Enable debug logging to standard error stream.
    
    Args:
        logger: Specific logger name, or None for all PyImageJ loggers
        debug_maven: Enable verbose Maven debug logging (default: False)
    """

Usage Examples:

import imagej.doctor

# Enable debug logging for all PyImageJ components
imagej.doctor.debug_to_stderr()

# Enable debug logging with Maven details
imagej.doctor.debug_to_stderr(debug_maven=True)

# Enable for specific logger only
imagej.doctor.debug_to_stderr(logger="scyjava._logger")

# Now initialize with verbose logging
import imagej
ij = imagej.init()

Dependency Verification

Check for required and optional dependencies with version compatibility.

Manual Dependency Checking:

import imagej.doctor

# Check specific dependencies
def check_dependencies():
    """Custom dependency verification example."""
    required_packages = [
        'numpy', 'scyjava', 'jpype1', 'xarray', 
        'imglyb', 'labeling', 'jgo'
    ]
    
    optional_packages = [
        'matplotlib', 'scikit-image', 'pandas'
    ]
    
    for package in required_packages:
        try:
            __import__(package)
            print(f"✓ {package} - Available")
        except ImportError:
            print(f"✗ {package} - Missing (Required)")
    
    for package in optional_packages:
        try:
            __import__(package)
            print(f"✓ {package} - Available (Optional)")
        except ImportError:
            print(f"- {package} - Missing (Optional)")

# Run dependency check
check_dependencies()

Java Environment Analysis

Detailed analysis of Java installation and configuration for ImageJ2 compatibility.

Java Configuration Checking:

import imagej.doctor
import scyjava as sj

# Analyze Java environment
def analyze_java_environment():
    """Analyze Java setup for PyImageJ compatibility."""
    
    print("=== Java Environment Analysis ===")
    
    # Check Java version before JVM start
    try:
        java_version = sj.jvm_version()
        print(f"Java version: {java_version}")
    except RuntimeError as e:
        print(f"Java detection issue: {e}")
    
    # Check Java memory configuration
    heap_size = sj.config.get_max_heap_size()
    print(f"Max heap size: {heap_size}")
    
    # Check for Java fetch configuration
    fetch_java = sj.config.get_fetch_java()
    print(f"Auto-fetch Java: {fetch_java}")
    
    # Start JVM and get runtime info
    if not sj.jvm_started():
        sj.start_jvm()
    
    Runtime = sj.jimport('java.lang.Runtime')
    runtime = Runtime.getRuntime()
    
    total_memory = runtime.totalMemory() // (1024 * 1024)  # MB
    free_memory = runtime.freeMemory() // (1024 * 1024)    # MB  
    max_memory = runtime.maxMemory() // (1024 * 1024)      # MB
    
    print(f"JVM Memory - Total: {total_memory}MB, Free: {free_memory}MB, Max: {max_memory}MB")

# Run Java analysis
analyze_java_environment()

Common Issue Resolution

Automated detection and suggested fixes for common PyImageJ problems.

Environment Issue Detection:

import imagej.doctor

def diagnose_common_issues():
    """Diagnose and suggest fixes for common PyImageJ issues."""
    
    issues_found = []
    suggestions = []
    
    # Check for common environment problems
    try:
        import jpype
        if jpype.isJVMStarted():
            issues_found.append("JVM already started")
            suggestions.append("Restart Python interpreter to reinitialize PyImageJ")
    except ImportError:
        issues_found.append("JPype not available")
        suggestions.append("Install JPype: pip install jpype1")
    
    try:
        import imagej
        # Try basic initialization
        ij = imagej.init()
        print("✓ Basic PyImageJ initialization successful")
    except Exception as e:
        issues_found.append(f"Initialization failed: {e}")
        suggestions.append("Run imagej.doctor.checkup() for detailed analysis")
    
    # Report findings
    if issues_found:
        print("\n=== Issues Found ===")
        for issue in issues_found:
            print(f"- {issue}")
        
        print("\n=== Suggested Solutions ===")
        for suggestion in suggestions:
            print(f"- {suggestion}")
    else:
        print("✓ No common issues detected")

# Run diagnostic
diagnose_common_issues()

Performance Monitoring

Monitor PyImageJ performance and resource usage for optimization.

import time
import psutil
import imagej

def monitor_performance():
    """Monitor PyImageJ initialization and operation performance."""
    
    print("=== Performance Monitoring ===")
    
    # Monitor initialization time
    start_time = time.time()
    process = psutil.Process()
    initial_memory = process.memory_info().rss // (1024 * 1024)  # MB
    
    print(f"Initial memory usage: {initial_memory}MB")
    print("Initializing PyImageJ...")
    
    ij = imagej.init()
    
    init_time = time.time() - start_time
    post_init_memory = process.memory_info().rss // (1024 * 1024)  # MB
    memory_increase = post_init_memory - initial_memory
    
    print(f"Initialization time: {init_time:.2f} seconds")
    print(f"Memory after init: {post_init_memory}MB (+{memory_increase}MB)")
    
    # Test basic operations
    start_time = time.time()
    test_array = ij.py.to_dataset(np.random.rand(512, 512))
    conversion_time = time.time() - start_time
    
    print(f"Array conversion time: {conversion_time:.4f} seconds")
    
    return {
        'init_time': init_time,
        'memory_increase': memory_increase,
        'conversion_time': conversion_time
    }

# Run performance monitoring
performance = monitor_performance()

Environment Variables

PyImageJ respects several environment variables for configuration:

  • DEBUG: Enable debug logging when set to any non-empty value
  • JAVA_HOME: Specify Java installation directory
  • PYJAVA_CLASSPATH: Additional JAR files for classpath
  • SCYJAVA_CACHE_DIR: Directory for caching downloaded JAR files

Troubleshooting Checklist

Common resolution steps for PyImageJ issues:

  1. Installation Issues: Run imagej.doctor.checkup()
  2. Java Problems: Verify Java 8+ installation with java -version
  3. Memory Issues: Increase JVM heap size with scyjava.config.add_option("-Xmx8g")
  4. Dependency Conflicts: Use fresh virtual environment
  5. JVM Restart: Restart Python interpreter if JVM settings change
  6. Legacy Issues: Try add_legacy=False for pure ImageJ2 mode
  7. Platform Issues: Check platform-specific installation requirements

Error Logging

PyImageJ provides structured error logging for debugging:

import logging
import imagej

# Configure logging to see PyImageJ internals
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('imagej')
logger.setLevel(logging.DEBUG)

# Now PyImageJ operations will show detailed logs
ij = imagej.init()

Install with Tessl CLI

npx tessl i tessl/pypi-pyimagej

docs

data-conversion.md

display-visualization.md

environment-diagnostics.md

gateway-initialization.md

image-processing.md

index.md

script-execution.md

tile.json