Coverage for src / taipanstack / config / version_config.py: 100%

44 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-23 14:54 +0000

1""" 

2Version-Specific Configuration Recommendations. 

3 

4This module provides configuration templates optimized for different 

5Python versions, helping users get the best performance while 

6maintaining stability. 

7 

8Following Stack pillars: Security, Stability, Simplicity, Scalability, Compatibility. 

9""" 

10 

11import logging 

12from dataclasses import dataclass 

13from typing import TYPE_CHECKING 

14 

15from taipanstack.core.compat import ( 

16 PY312, 

17 PY313, 

18 PY314, 

19 VersionTier, 

20 get_features, 

21) 

22from taipanstack.core.optimizations import get_recommended_thread_pool_size 

23 

24if TYPE_CHECKING: 

25 pass 

26 

27__all__ = [ 

28 "VersionRecommendations", 

29 "get_version_recommendations", 

30] 

31 

32logger = logging.getLogger(__name__) 

33 

34 

35# ============================================================================= 

36# Version Recommendations 

37# ============================================================================= 

38 

39 

40@dataclass(frozen=True, slots=True) 

41class VersionRecommendations: 

42 """Configuration recommendations for a Python version. 

43 

44 These recommendations help users configure their Stack-based 

45 applications for optimal performance on their Python version. 

46 """ 

47 

48 version_tier: VersionTier 

49 min_version: str 

50 max_version: str | None 

51 

52 # Threading recommendations 

53 recommended_thread_pool_size: int 

54 supports_true_parallelism: bool 

55 

56 # Memory recommendations 

57 recommended_gc_mode: str 

58 use_mimalloc: bool 

59 

60 # Code style recommendations 

61 use_type_params: bool # PEP 695 type parameter syntax 

62 use_exception_groups: bool # PEP 654 exception groups 

63 use_match_statements: bool # PEP 634 structural matching 

64 use_override_decorator: bool # PEP 698 @override 

65 use_deprecated_decorator: bool # PEP 702 @deprecated 

66 

67 # Performance recommendations 

68 jit_available: bool 

69 recommended_optimization_level: int 

70 

71 # Notes for user 

72 notes: tuple[str, ...] 

73 

74 def to_dict(self) -> dict[str, object]: 

75 """Convert to dictionary for serialization.""" 

76 return { 

77 "version_tier": self.version_tier.value, 

78 "version_range": f"{self.min_version} - {self.max_version or 'latest'}", 

79 "threading": { 

80 "pool_size": self.recommended_thread_pool_size, 

81 "true_parallelism": self.supports_true_parallelism, 

82 }, 

83 "memory": { 

84 "gc_mode": self.recommended_gc_mode, 

85 "mimalloc": self.use_mimalloc, 

86 }, 

87 "code_style": { 

88 "type_params": self.use_type_params, 

89 "exception_groups": self.use_exception_groups, 

90 "match_statements": self.use_match_statements, 

91 "override_decorator": self.use_override_decorator, 

92 "deprecated_decorator": self.use_deprecated_decorator, 

93 }, 

94 "performance": { 

95 "jit_available": self.jit_available, 

96 "optimization_level": self.recommended_optimization_level, 

97 }, 

98 "notes": list(self.notes), 

99 } 

100 

101 

102# ============================================================================= 

103# Recommendation Generators 

104# ============================================================================= 

105 

106 

107def _get_311_recommendations() -> VersionRecommendations: 

108 """Get recommendations for Python 3.11.""" 

109 return VersionRecommendations( 

110 version_tier=VersionTier.STABLE, 

111 min_version="3.11.0", 

112 max_version="3.11.x", 

113 recommended_thread_pool_size=get_recommended_thread_pool_size(), 

114 supports_true_parallelism=False, 

115 recommended_gc_mode="default", 

116 use_mimalloc=False, 

117 use_type_params=False, 

118 use_exception_groups=True, 

119 use_match_statements=True, 

120 use_override_decorator=False, 

121 use_deprecated_decorator=False, 

122 jit_available=False, 

123 recommended_optimization_level=1, 

124 notes=( 

125 "Stable baseline with 25% speedup from specialized bytecode", 

126 "Use exception groups (PEP 654) for better error handling", 

127 "Self type available for type hints", 

128 ), 

129 ) 

130 

131 

132def _get_312_recommendations() -> VersionRecommendations: 

133 """Get recommendations for Python 3.12.""" 

134 return VersionRecommendations( 

135 version_tier=VersionTier.ENHANCED, 

136 min_version="3.12.0", 

137 max_version="3.12.x", 

138 recommended_thread_pool_size=get_recommended_thread_pool_size(), 

139 supports_true_parallelism=False, 

140 recommended_gc_mode="default", 

141 use_mimalloc=False, 

142 use_type_params=True, 

143 use_exception_groups=True, 

144 use_match_statements=True, 

145 use_override_decorator=True, 

146 use_deprecated_decorator=False, 

147 jit_available=False, 

148 recommended_optimization_level=1, 

149 notes=( 

150 "Use type parameter syntax (PEP 695) for cleaner generics", 

151 "Use @override decorator (PEP 698) for method overrides", 

152 "Improved f-string parsing and error messages", 

153 ), 

154 ) 

155 

156 

157def _get_313_recommendations() -> VersionRecommendations: 

158 """Get recommendations for Python 3.13.""" 

159 features = get_features() 

160 return VersionRecommendations( 

161 version_tier=VersionTier.MODERN, 

162 min_version="3.13.0", 

163 max_version="3.13.x", 

164 recommended_thread_pool_size=get_recommended_thread_pool_size(), 

165 supports_true_parallelism=features.has_free_threading, 

166 recommended_gc_mode="tuned" if features.has_mimalloc else "default", 

167 use_mimalloc=features.has_mimalloc, 

168 use_type_params=True, 

169 use_exception_groups=True, 

170 use_match_statements=True, 

171 use_override_decorator=True, 

172 use_deprecated_decorator=True, 

173 jit_available=features.has_jit, 

174 recommended_optimization_level=2 if features.experimental_enabled else 1, 

175 notes=( 

176 "Use @deprecated decorator (PEP 702) for deprecation warnings", 

177 "JIT compiler available (experimental) with STACK_ENABLE_EXPERIMENTAL=1", 

178 "Free-threading available on special builds (no GIL)", 

179 "mimalloc allocator provides better memory performance", 

180 ), 

181 ) 

182 

183 

184def _get_314_recommendations() -> VersionRecommendations: 

185 """Get recommendations for Python 3.14.""" 

186 features = get_features() 

187 return VersionRecommendations( 

188 version_tier=VersionTier.CUTTING_EDGE, 

189 min_version="3.14.0", 

190 max_version=None, 

191 recommended_thread_pool_size=get_recommended_thread_pool_size(), 

192 supports_true_parallelism=features.has_free_threading, 

193 recommended_gc_mode="incremental", 

194 use_mimalloc=True, 

195 use_type_params=True, 

196 use_exception_groups=True, 

197 use_match_statements=True, 

198 use_override_decorator=True, 

199 use_deprecated_decorator=True, 

200 jit_available=features.has_jit, 

201 recommended_optimization_level=2 if features.experimental_enabled else 1, 

202 notes=( 

203 "Tail-call interpreter provides 9-15% speedup", 

204 "Deferred annotations (PEP 649) for faster startup", 

205 "Stable free-threading support available", 

206 "JIT compiler significantly improved from 3.13", 

207 "Incremental GC reduces pause times", 

208 ), 

209 ) 

210 

211 

212def get_version_recommendations() -> VersionRecommendations: 

213 """Get configuration recommendations for the current Python version. 

214 

215 Returns: 

216 VersionRecommendations with optimal settings. 

217 

218 """ 

219 if PY314: 

220 return _get_314_recommendations() 

221 if PY313: 

222 return _get_313_recommendations() 

223 if PY312: 

224 return _get_312_recommendations() 

225 return _get_311_recommendations()