service-capacity-modeling 0.3.79__tar.gz → 0.3.80__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/PKG-INFO +1 -1
  2. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/capacity_planner.py +11 -14
  3. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/stats.py +5 -1
  4. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/PKG-INFO +1 -1
  5. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/LICENSE +0 -0
  6. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/README.md +0 -0
  7. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/__init__.py +0 -0
  8. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/__init__.py +0 -0
  9. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/__init__.py +0 -0
  10. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/pricing/aws/3yr-reserved_ec2.json +0 -0
  11. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/pricing/aws/3yr-reserved_zz-overrides.json +0 -0
  12. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/profiles.txt +0 -0
  13. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5.json +0 -0
  14. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5a.json +0 -0
  15. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5d.json +0 -0
  16. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5n.json +0 -0
  17. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6a.json +0 -0
  18. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6i.json +0 -0
  19. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6id.json +0 -0
  20. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c7a.json +0 -0
  21. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c7i.json +0 -0
  22. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c8i.json +0 -0
  23. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i3en.json +0 -0
  24. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i4i.json +0 -0
  25. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i7i.json +0 -0
  26. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m4.json +0 -0
  27. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m5.json +0 -0
  28. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m5n.json +0 -0
  29. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6a.json +0 -0
  30. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6i.json +0 -0
  31. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6id.json +0 -0
  32. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6idn.json +0 -0
  33. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6in.json +0 -0
  34. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m7a.json +0 -0
  35. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m7i.json +0 -0
  36. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m8i.json +0 -0
  37. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r4.json +0 -0
  38. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r5.json +0 -0
  39. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r5n.json +0 -0
  40. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6a.json +0 -0
  41. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6i.json +0 -0
  42. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6id.json +0 -0
  43. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6idn.json +0 -0
  44. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6in.json +0 -0
  45. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r7a.json +0 -0
  46. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r7i.json +0 -0
  47. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r8i.json +0 -0
  48. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_drives.json +0 -0
  49. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_instances.json +0 -0
  50. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_services.json +0 -0
  51. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/interface.py +0 -0
  52. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/__init__.py +0 -0
  53. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/common.py +0 -0
  54. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/headroom_strategy.py +0 -0
  55. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/__init__.py +0 -0
  56. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/__init__.py +0 -0
  57. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/aurora.py +0 -0
  58. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/cassandra.py +0 -0
  59. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/counter.py +0 -0
  60. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/crdb.py +0 -0
  61. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/ddb.py +0 -0
  62. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/elasticsearch.py +0 -0
  63. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/entity.py +0 -0
  64. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/evcache.py +0 -0
  65. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/graphkv.py +0 -0
  66. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/iso_date_math.py +0 -0
  67. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/kafka.py +0 -0
  68. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/key_value.py +0 -0
  69. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/postgres.py +0 -0
  70. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/rds.py +0 -0
  71. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/stateless_java.py +0 -0
  72. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/time_series.py +0 -0
  73. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/time_series_config.py +0 -0
  74. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/wal.py +0 -0
  75. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/org/netflix/zookeeper.py +0 -0
  76. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/models/utils.py +0 -0
  77. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/tools/__init__.py +0 -0
  78. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/tools/auto_shape.py +0 -0
  79. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/tools/fetch_pricing.py +0 -0
  80. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/tools/generate_missing.py +0 -0
  81. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling/tools/instance_families.py +0 -0
  82. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/SOURCES.txt +0 -0
  83. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/dependency_links.txt +0 -0
  84. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/entry_points.txt +0 -0
  85. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/requires.txt +0 -0
  86. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/service_capacity_modeling.egg-info/top_level.txt +0 -0
  87. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/setup.cfg +0 -0
  88. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/setup.py +0 -0
  89. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_arguments.py +0 -0
  90. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_buffers.py +0 -0
  91. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_common.py +0 -0
  92. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_desire_merge.py +0 -0
  93. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_generate_scenarios.py +0 -0
  94. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_hardware.py +0 -0
  95. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_hardware_shapes.py +0 -0
  96. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_headroom_strategy.py +0 -0
  97. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_io2.py +0 -0
  98. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_model_dump.py +0 -0
  99. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_reproducible.py +0 -0
  100. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_simulation.py +0 -0
  101. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_utils.py +0 -0
  102. {service_capacity_modeling-0.3.79 → service_capacity_modeling-0.3.80}/tests/test_working_set.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: service-capacity-modeling
3
- Version: 0.3.79
3
+ Version: 0.3.80
4
4
  Summary: Contains utilities for modeling capacity for pluggable workloads
5
5
  Author: Joseph Lynch
6
6
  Author-email: josephl@netflix.com
@@ -85,7 +85,7 @@ def model_desires(
85
85
  data_shape = desires.data_shape.model_copy(deep=True)
86
86
 
87
87
  query_pattern_simulation = {}
88
- for field in sorted(query_pattern.model_fields):
88
+ for field in sorted(QueryPattern.model_fields):
89
89
  d = getattr(query_pattern, field)
90
90
  if isinstance(d, Interval):
91
91
  query_pattern_simulation[field] = simulate_interval(d, field)(num_sims)
@@ -93,7 +93,7 @@ def model_desires(
93
93
  query_pattern_simulation[field] = [d] * num_sims
94
94
 
95
95
  data_shape_simulation = {}
96
- for field in sorted(data_shape.model_fields):
96
+ for field in sorted(DataShape.model_fields):
97
97
  d = getattr(data_shape, field)
98
98
  if isinstance(d, Interval):
99
99
  data_shape_simulation[field] = simulate_interval(d, field)(num_sims)
@@ -104,14 +104,11 @@ def model_desires(
104
104
  query_pattern = QueryPattern(
105
105
  **{
106
106
  f: query_pattern_simulation[f][sim]
107
- for f in sorted(query_pattern.model_fields)
107
+ for f in sorted(QueryPattern.model_fields)
108
108
  }
109
109
  )
110
110
  data_shape = DataShape(
111
- **{
112
- f: data_shape_simulation[f][sim]
113
- for f in sorted(data_shape.model_fields)
114
- }
111
+ **{f: data_shape_simulation[f][sim] for f in sorted(DataShape.model_fields)}
115
112
  )
116
113
 
117
114
  d = desires.model_copy(update={"query_pattern": None, "data_shape": None})
@@ -129,7 +126,7 @@ def model_desires_percentiles(
129
126
 
130
127
  query_pattern_simulation = {}
131
128
  query_pattern_means = {}
132
- for field in sorted(query_pattern.model_fields):
129
+ for field in sorted(QueryPattern.model_fields):
133
130
  d = getattr(query_pattern, field)
134
131
  if isinstance(d, Interval):
135
132
  query_pattern_simulation[field] = interval_percentile(d, percentiles)
@@ -143,7 +140,7 @@ def model_desires_percentiles(
143
140
 
144
141
  data_shape_simulation = {}
145
142
  data_shape_means = {}
146
- for field in sorted(data_shape.model_fields):
143
+ for field in sorted(DataShape.model_fields):
147
144
  d = getattr(data_shape, field)
148
145
  if isinstance(d, Interval):
149
146
  data_shape_simulation[field] = interval_percentile(d, percentiles)
@@ -161,13 +158,13 @@ def model_desires_percentiles(
161
158
  query_pattern = QueryPattern(
162
159
  **{
163
160
  f: query_pattern_simulation[f][i]
164
- for f in sorted(query_pattern.model_fields)
161
+ for f in sorted(QueryPattern.model_fields)
165
162
  }
166
163
  )
167
164
  except Exception as exp:
168
165
  raise exp
169
166
  data_shape = DataShape(
170
- **{f: data_shape_simulation[f][i] for f in sorted(data_shape.model_fields)}
167
+ **{f: data_shape_simulation[f][i] for f in sorted(DataShape.model_fields)}
171
168
  )
172
169
  d = desires.model_copy(deep=True)
173
170
  d.query_pattern = query_pattern
@@ -175,10 +172,10 @@ def model_desires_percentiles(
175
172
  results.append(d)
176
173
 
177
174
  mean_qp = QueryPattern(
178
- **{f: query_pattern_means[f] for f in sorted(query_pattern.model_fields)}
175
+ **{f: query_pattern_means[f] for f in sorted(QueryPattern.model_fields)}
179
176
  )
180
177
  mean_ds = DataShape(
181
- **{f: data_shape_means[f] for f in sorted(data_shape.model_fields)}
178
+ **{f: data_shape_means[f] for f in sorted(DataShape.model_fields)}
182
179
  )
183
180
  d = desires.model_copy(deep=True)
184
181
  d.query_pattern = mean_qp
@@ -298,7 +295,7 @@ def _add_requirement(
298
295
 
299
296
  requirements = accum[requirement.requirement_type]
300
297
 
301
- for field in sorted(requirement.model_fields):
298
+ for field in sorted(CapacityRequirement.model_fields):
302
299
  d = getattr(requirement, field)
303
300
  if isinstance(d, Interval):
304
301
  if field not in requirements:
@@ -45,7 +45,11 @@ def _gamma_fn_from_params(
45
45
 
46
46
  def f(k: float) -> float:
47
47
  zero = high / low
48
- return float(gammaf(k, high_p * k / mid) / gammaf(k, low_p * k / mid) - zero)
48
+ high_x = high_p * k / mid
49
+ low_x = low_p * k / mid
50
+ result = gammaf(k, high_x) / gammaf(k, low_x) - zero
51
+ # Use .item() to convert NumPy scalar to Python float
52
+ return result.item() if hasattr(result, "item") else float(result)
49
53
 
50
54
  return f
51
55
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: service-capacity-modeling
3
- Version: 0.3.79
3
+ Version: 0.3.80
4
4
  Summary: Contains utilities for modeling capacity for pluggable workloads
5
5
  Author: Joseph Lynch
6
6
  Author-email: josephl@netflix.com