openseries 1.9.5__py3-none-any.whl → 1.9.7__py3-none-any.whl

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.
openseries/simulation.py CHANGED
@@ -9,7 +9,13 @@ SPDX-License-Identifier: BSD-3-Clause
9
9
 
10
10
  from __future__ import annotations
11
11
 
12
- from typing import TYPE_CHECKING, cast
12
+ from functools import cached_property
13
+ from typing import TYPE_CHECKING, TypedDict, cast
14
+
15
+ try:
16
+ from typing import Unpack
17
+ except ImportError:
18
+ from typing_extensions import Unpack
13
19
 
14
20
  if TYPE_CHECKING:
15
21
  import datetime as dt # pragma: no cover
@@ -41,6 +47,14 @@ from .owntypes import (
41
47
  __all__ = ["ReturnSimulation"]
42
48
 
43
49
 
50
+ class _JumpParams(TypedDict, total=False):
51
+ """TypedDict for jump diffusion parameters."""
52
+
53
+ jumps_lamda: NonNegativeFloat
54
+ jumps_sigma: NonNegativeFloat
55
+ jumps_mu: float
56
+
57
+
44
58
  def _random_generator(seed: int | None) -> Generator:
45
59
  """Make a Numpy Random Generator object.
46
60
 
@@ -60,7 +74,59 @@ def _random_generator(seed: int | None) -> Generator:
60
74
  return Generator(bit_generator=bg)
61
75
 
62
76
 
63
- class ReturnSimulation(BaseModel): # type: ignore[misc]
77
+ def _create_base_simulation(
78
+ cls: type[ReturnSimulation],
79
+ returns: DataFrame,
80
+ number_of_sims: PositiveInt,
81
+ trading_days: PositiveInt,
82
+ trading_days_in_year: DaysInYearType,
83
+ mean_annual_return: float,
84
+ mean_annual_vol: PositiveFloat,
85
+ seed: int | None = None,
86
+ **kwargs: Unpack[_JumpParams],
87
+ ) -> ReturnSimulation:
88
+ """Common logic for creating simulations.
89
+
90
+ Parameters
91
+ ----------
92
+ cls: type[ReturnSimulation]
93
+ The ReturnSimulation class
94
+ returns: pandas.DataFrame
95
+ The calculated returns data
96
+ number_of_sims: PositiveInt
97
+ Number of simulations to generate
98
+ trading_days: PositiveInt
99
+ Number of trading days to simulate
100
+ trading_days_in_year: DaysInYearType
101
+ Number of trading days used to annualize
102
+ mean_annual_return: float
103
+ Mean annual return
104
+ mean_annual_vol: PositiveFloat
105
+ Mean annual volatility
106
+ seed: int, optional
107
+ Seed for random process initiation
108
+ **kwargs
109
+ Additional keyword arguments for jump parameters
110
+
111
+ Returns:
112
+ -------
113
+ ReturnSimulation
114
+ A ReturnSimulation instance
115
+
116
+ """
117
+ return cls(
118
+ number_of_sims=number_of_sims,
119
+ trading_days=trading_days,
120
+ trading_days_in_year=trading_days_in_year,
121
+ mean_annual_return=mean_annual_return,
122
+ mean_annual_vol=mean_annual_vol,
123
+ dframe=returns,
124
+ seed=seed,
125
+ **kwargs,
126
+ )
127
+
128
+
129
+ class ReturnSimulation(BaseModel):
64
130
  """The class ReturnSimulation allows for simulating financial timeseries.
65
131
 
66
132
  Parameters
@@ -105,7 +171,7 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
105
171
  revalidate_instances="always",
106
172
  )
107
173
 
108
- @property
174
+ @cached_property
109
175
  def results(self: Self) -> DataFrame:
110
176
  """Simulation data.
111
177
 
@@ -197,13 +263,14 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
197
263
  size=(number_of_sims, trading_days),
198
264
  )
199
265
 
200
- return cls(
266
+ return _create_base_simulation(
267
+ cls=cls,
268
+ returns=DataFrame(data=returns, dtype="float64"),
201
269
  number_of_sims=number_of_sims,
202
270
  trading_days=trading_days,
203
271
  trading_days_in_year=trading_days_in_year,
204
272
  mean_annual_return=mean_annual_return,
205
273
  mean_annual_vol=mean_annual_vol,
206
- dframe=DataFrame(data=returns, dtype="float64"),
207
274
  seed=seed,
208
275
  )
209
276
 
@@ -255,13 +322,14 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
255
322
  - 1
256
323
  )
257
324
 
258
- return cls(
325
+ return _create_base_simulation(
326
+ cls=cls,
327
+ returns=DataFrame(data=returns, dtype="float64"),
259
328
  number_of_sims=number_of_sims,
260
329
  trading_days=trading_days,
261
330
  trading_days_in_year=trading_days_in_year,
262
331
  mean_annual_return=mean_annual_return,
263
332
  mean_annual_vol=mean_annual_vol,
264
- dframe=DataFrame(data=returns, dtype="float64"),
265
333
  seed=seed,
266
334
  )
267
335
 
@@ -317,13 +385,14 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
317
385
 
318
386
  returns = drift + wiener
319
387
 
320
- return cls(
388
+ return _create_base_simulation(
389
+ cls=cls,
390
+ returns=DataFrame(data=returns, dtype="float64"),
321
391
  number_of_sims=number_of_sims,
322
392
  trading_days=trading_days,
323
393
  trading_days_in_year=trading_days_in_year,
324
394
  mean_annual_return=mean_annual_return,
325
395
  mean_annual_vol=mean_annual_vol,
326
- dframe=DataFrame(data=returns, dtype="float64"),
327
396
  seed=seed,
328
397
  )
329
398
 
@@ -404,17 +473,18 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
404
473
 
405
474
  returns[:, 0] = 0.0
406
475
 
407
- return cls(
476
+ return _create_base_simulation(
477
+ cls=cls,
478
+ returns=DataFrame(data=returns, dtype="float64"),
408
479
  number_of_sims=number_of_sims,
409
480
  trading_days=trading_days,
410
481
  trading_days_in_year=trading_days_in_year,
411
482
  mean_annual_return=mean_annual_return,
412
483
  mean_annual_vol=mean_annual_vol,
484
+ seed=seed,
413
485
  jumps_lamda=jumps_lamda,
414
486
  jumps_sigma=jumps_sigma,
415
487
  jumps_mu=jumps_mu,
416
- dframe=DataFrame(data=returns, dtype="float64"),
417
- seed=seed,
418
488
  )
419
489
 
420
490
  def to_dataframe(
@@ -465,15 +535,17 @@ class ReturnSimulation(BaseModel): # type: ignore[misc]
465
535
  )
466
536
  return sdf
467
537
 
468
- fdf = DataFrame()
469
- for item in range(self.number_of_sims):
470
- sdf = self.dframe.iloc[item].T.to_frame()
471
- sdf.index = Index(d_range)
472
- sdf.columns = MultiIndex.from_arrays(
473
- [
474
- [f"{name}_{item}"],
475
- [ValueType.RTRN],
476
- ],
538
+ df_list = [
539
+ DataFrame(
540
+ data=self.dframe.iloc[item].values,
541
+ index=Index(d_range),
542
+ columns=MultiIndex.from_arrays(
543
+ [
544
+ [f"{name}_{item}"],
545
+ [ValueType.RTRN],
546
+ ],
547
+ ),
477
548
  )
478
- fdf = concat([fdf, sdf], axis="columns", sort=True)
479
- return fdf
549
+ for item in range(self.number_of_sims)
550
+ ]
551
+ return concat(df_list, axis="columns", sort=True)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: openseries
3
- Version: 1.9.5
3
+ Version: 1.9.7
4
4
  Summary: Tools for analyzing financial timeseries.
5
5
  License: # BSD 3-Clause License
6
6
 
@@ -29,6 +29,7 @@ License: # BSD 3-Clause License
29
29
  however caused and on any theory of liability, whether in contract, strict liability,
30
30
  or tort (including negligence or otherwise) arising in any way out of the use of this
31
31
  software, even if advised of the possibility of such damage.
32
+ License-File: LICENSE.md
32
33
  Keywords: python,finance,fintech,data-science,timeseries,timeseries-data,timeseries-analysis,investment,investment-analysis,investing
33
34
  Author: Martin Karrin
34
35
  Author-email: martin.karrin@captor.se
@@ -117,9 +118,9 @@ _,_=series.plot_series()
117
118
 
118
119
  ```
119
120
 
120
- ### Sample output using the report_html() function:
121
+ ### Sample output using the report_html() function
121
122
 
122
- <img src="https://raw.githubusercontent.com/CaptorAB/openseries/master/captor_plot_image.png" alt="Two Assets Compared" width="1000" />
123
+ <img src="https://raw.githubusercontent.com/CaptorAB/openseries/master/openseries_plot.png" alt="Two Assets Compared" width="1000" />
123
124
 
124
125
  ## Development Instructions
125
126
 
@@ -151,10 +152,7 @@ source source_me
151
152
 
152
153
  ## Testing and Linting / Type-checking
153
154
 
154
- Ruff and Mypy checking is embedded in the pre-commit hook. Both
155
- are also used in the project's GitHub workflows and are run when the `lint`
156
- alternative is chosen in the below commands.
157
- Any silenced error codes can be found in the
155
+ [Ruff](https://docs.astral.sh/ruff/) and [mypy](https://mypy-lang.org/) checking is embedded in the pre-commit hook. Both are also used in the project's GitHub workflows and are run when the `lint` alternative is chosen in the below commands. Any silenced error codes can be found in the
158
156
  [pyproject.toml](https://github.com/CaptorAB/openseries/blob/master/pyproject.toml)
159
157
  file or in in-line comments.
160
158
 
@@ -200,7 +198,7 @@ make lint
200
198
  | [report.py](https://github.com/CaptorAB/openseries/blob/master/openseries/report.py) | Defines the _report_html_ function that is used to create a landscape orientation report on at least two assets. All preceding assets will be measured against the last asset in the input OpenFrame. |
201
199
  | [simulation.py](https://github.com/CaptorAB/openseries/blob/master/openseries/simulation.py) | Defines the class _ReturnSimulation_ to create simulated financial timeseries. Used in the project's test suite |
202
200
 
203
- ### Class methods used to construct objects.
201
+ ### Class methods used to construct objects
204
202
 
205
203
  | Method | Applies to | Description |
206
204
  |:------------------|:------------------------------|:---------------------------------------------------------------------------------------------------|
@@ -209,7 +207,7 @@ make lint
209
207
  | `from_fixed_rate` | `OpenTimeSeries` | Class method to create an OpenTimeSeries object from a fixed rate, number of days and an end date. |
210
208
  | `from_deepcopy` | `OpenTimeSeries`, `OpenFrame` | Creates a copy of an OpenTimeSeries object. |
211
209
 
212
- ### Non-numerical or "helper" properties that apply only to the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) class.
210
+ ### Non-numerical or "helper" properties that apply only to the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) class
213
211
 
214
212
  | Property | type | Applies to | Description |
215
213
  |:----------------|:---------------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -227,7 +225,7 @@ make lint
227
225
  | `markets` | `list[str]` or `str` | `OpenTimeSeries` | (List of) markets code(s) according to market code(s) input for the [pandas-market-calendars](https://pandas-market-calendars.readthedocs.io/en/latest/) package. |
228
226
  | `valuetype` | `ValueType` | `OpenTimeSeries` | Field identifies the type of values in the series. ValueType is an Enum. |
229
227
 
230
- ### Non-numerical or "helper" properties that apply only to the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class.
228
+ ### Non-numerical or "helper" properties that apply only to the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class
231
229
 
232
230
  | Property | type | Applies to | Description |
233
231
  |:-------------------|:---------------------------------|:------------|:-------------------------------------------------------------------------|
@@ -241,7 +239,7 @@ make lint
241
239
  | `lengths_of_items` | `pandas.Series[int]` | `OpenFrame` | Number of items in each of the series in the OpenFrame. |
242
240
  | `span_of_days_all` | `pandas.Series[int]` | `OpenFrame` | Number of days from the first to the last in each of the series. |
243
241
 
244
- ### Non-numerical or "helper" properties that apply to both the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) and the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class.
242
+ ### Non-numerical or "helper" properties that apply to both the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) and the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class
245
243
 
246
244
  | Property | type | Applies to | Description |
247
245
  |:--------------------|:---------------------------------|:------------------------------|:----------------------------------------------------------------------------------|
@@ -254,7 +252,7 @@ make lint
254
252
  | `periods_in_a_year` | `float` | `OpenTimeSeries`, `OpenFrame` | The number of observations in an average year for all days in the data. |
255
253
  | `yearfrac` | `float` | `OpenTimeSeries`, `OpenFrame` | Length of timeseries expressed as np.float64 fraction of a year with 365.25 days. |
256
254
 
257
- ### Methods that apply only to the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) class.
255
+ ### Methods that apply only to the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) class
258
256
 
259
257
  | Method | Applies to | Description |
260
258
  |:-------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------------------|
@@ -262,10 +260,9 @@ make lint
262
260
  | `set_new_label` | `OpenTimeSeries` | Method to change the pandas.DataFrame column MultiIndex. |
263
261
  | `running_adjustment` | `OpenTimeSeries` | Adjusts the series performance with a `float` factor. |
264
262
  | `ewma_vol_func` | `OpenTimeSeries` | Returns a `pandas.Series` with volatility based on [Exponentially Weighted Moving Average](https://www.investopedia.com/articles/07/ewma.asp). |
265
- | `from_1d_rate_to_cumret` | `OpenTimeSeries` | Converts a series of 1-day rates into a cumulative valueseries. |
266
- |
263
+ | `from_1d_rate_to_cumret` | `OpenTimeSeries` | Converts a series of 1-day rates into a cumulative valueseries. |
267
264
 
268
- ### Methods that apply only to the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class.
265
+ ### Methods that apply only to the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class
269
266
 
270
267
  | Method | Applies to | Description |
271
268
  |:---------------------------------|:------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -274,7 +271,7 @@ make lint
274
271
  | `add_timeseries` | `OpenFrame` | Adds a given OpenTimeSeries to the OpenFrame. |
275
272
  | `delete_timeseries` | `OpenFrame` | Deletes an OpenTimeSeries from the OpenFrame. |
276
273
  | `relative` | `OpenFrame` | Calculates a new series that is the relative performance of two others. |
277
- | `make_portfolio` | `OpenFrame` | Calculates a portfolio timeseries based on the series and weights. Weights can be provided as a list, or a weight strategy can be set as *equal weights* or *inverted volatility*. |
274
+ | `make_portfolio` | `OpenFrame` | Calculates a portfolio timeseries based on the series and weights. Weights an be provided as a list, or a weight strategy can be set as _equal weights_ or _inverted volatility_. |
278
275
  | `ord_least_squares_fit` | `OpenFrame` | Performs a regression and an [Ordinary Least Squares](https://www.statsmodels.org/stable/examples/notebooks/generated/ols.html) fit. |
279
276
  | `beta` | `OpenFrame` | Calculates [Beta](https://www.investopedia.com/terms/b/beta.asp) of an asset relative a market. |
280
277
  | `jensen_alpha` | `OpenFrame` | Calculates [Jensen's Alpha](https://www.investopedia.com/terms/j/jensensmeasure.asp) of an asset relative a market. |
@@ -288,7 +285,7 @@ make lint
288
285
  | `ewma_risk` | `OpenFrame` | Returns a `pandas.DataFrame` with volatility and correlation based on [Exponentially Weighted Moving Average](https://www.investopedia.com/articles/07/ewma.asp). |
289
286
  | `multi_factor_linear_regression` | `OpenFrame` | Treats one specified series as the dependent variable (y) and uses all remaining series as independent variables (X) in a linear regression and returns a DataFrame with summary output and a series of predicted values. |
290
287
 
291
- ### Methods that apply to both the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) and the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class.
288
+ ### Methods that apply to both the [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) and the [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py) class
292
289
 
293
290
  | Method | Applies to | Description |
294
291
  |:-----------------------------------|:------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -314,7 +311,7 @@ make lint
314
311
  | `rolling_cvar_down` | `OpenTimeSeries`, `OpenFrame` | Returns a pandas.DataFrame with rolling CVaR figures. |
315
312
  | `calc_range` | `OpenTimeSeries`, `OpenFrame` | Returns the start and end dates of a range from specific period definitions. Used by the below numerical methods and not meant to be used independently. |
316
313
 
317
- ### Numerical properties available for individual [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) or on all series in an [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py).
314
+ ### Numerical properties available for individual [OpenTimeSeries](https://github.com/CaptorAB/openseries/blob/master/openseries/series.py) or on all series in an [OpenFrame](https://github.com/CaptorAB/openseries/blob/master/openseries/frame.py)
318
315
 
319
316
  | Property | type | Applies to | Description |
320
317
  |:------------------------|:-------------------------|:------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -340,7 +337,7 @@ make lint
340
337
  | `kurtosis` | `float`, `pandas.Series` | `OpenTimeSeries`, `OpenFrame` | [Kurtosis](https://www.investopedia.com/terms/k/kurtosis.asp) of the return distribution. |
341
338
  | `z_score` | `float`, `pandas.Series` | `OpenTimeSeries`, `OpenFrame` | [Z-score](https://www.investopedia.com/terms/z/zscore.asp) as (last return - mean return) / standard deviation of returns. |
342
339
 
343
- ### Methods below are identical to the Numerical Properties above.
340
+ ### Methods below are identical to the Numerical Properties above
344
341
 
345
342
  _They are simply methods that take different date or length inputs to return the
346
343
  properties for subset periods._
@@ -0,0 +1,18 @@
1
+ openseries/__init__.py,sha256=WAh79oE-ceGG_yl4nBukkp3UPvmLk4u_GySL2xOKbxE,1375
2
+ openseries/_common_model.py,sha256=BTWXpXkKrvihVdHF4HsnIwd1tH_YgAnoxMz940qoy-8,89569
3
+ openseries/_risk.py,sha256=8XKZWWXrECo0Vd9r2kbcn4dzyPuo93DAEO8eSkv4w20,2357
4
+ openseries/datefixer.py,sha256=eVhxaFj_la_XZQuPQHvinTWEzCCn8ct_AnZEYPOpY6U,15775
5
+ openseries/frame.py,sha256=PGtcxCTmkKO42IYhovxZoCccTF97Ls_4Ru7ovIUETOU,56529
6
+ openseries/load_plotly.py,sha256=C6iQyabfi5ubSONuis3yRHb3bUktBtTDlovsDIaeHNQ,2266
7
+ openseries/owntypes.py,sha256=3n3IgqRjIvUfYD-37Bedilgx0UDGA-RPU0IC7wujMWg,9681
8
+ openseries/plotly_captor_logo.json,sha256=F5nhMzEyxKywtjvQqMTKgKRCJQYMDIiBgDSxdte8Clo,178
9
+ openseries/plotly_layouts.json,sha256=MvDEQuiqIhMBXBelXb1sedTOlTPheizv6NZRLeE9YS4,1431
10
+ openseries/portfoliotools.py,sha256=zXnKiPoKQ691Qq_o7cg_fBRIPaj55r52OEanjBw8jOA,19339
11
+ openseries/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ openseries/report.py,sha256=FKnOMrTc9Ofe_I_eBdBnmIaWluAYvGPCZ16VjbzwF10,14375
13
+ openseries/series.py,sha256=dQh7dAosFxJqiUdj8Cf7A19vv-w4hTAkU4_O_WnvxA4,28617
14
+ openseries/simulation.py,sha256=LRg7hx5iWuoosESgKzaEnj5XkEv5bTNjRAj3SDMo4kM,16321
15
+ openseries-1.9.7.dist-info/METADATA,sha256=rR7bJ3SWtXHL82WBxvW3FUrCkNIsGF31XX3n8kpiYYI,48251
16
+ openseries-1.9.7.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
17
+ openseries-1.9.7.dist-info/licenses/LICENSE.md,sha256=wNupG-KLsG0aTncb_SMNDh1ExtrKXlpxSJ6RC-g-SWs,1516
18
+ openseries-1.9.7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,17 +0,0 @@
1
- openseries/__init__.py,sha256=WAh79oE-ceGG_yl4nBukkp3UPvmLk4u_GySL2xOKbxE,1375
2
- openseries/_common_model.py,sha256=Nug9DIp54q7tt0yHFEQKAZPrG9c1Oy6VpyqoRWKOC4I,85499
3
- openseries/_risk.py,sha256=8XKZWWXrECo0Vd9r2kbcn4dzyPuo93DAEO8eSkv4w20,2357
4
- openseries/datefixer.py,sha256=Z3AKLvULzy9MPQOndKhay0nGx2EgYcjVFNjT9qReoHk,15727
5
- openseries/frame.py,sha256=a3TPLdvapnvHU_wbhPO0G95UHaHlJLXnsSmm-Ti_2sw,58579
6
- openseries/load_plotly.py,sha256=C6iQyabfi5ubSONuis3yRHb3bUktBtTDlovsDIaeHNQ,2266
7
- openseries/owntypes.py,sha256=P9CKoLtjUaFiktLb_axihrlVR5bJfdDbSFJC72kQG2o,9584
8
- openseries/plotly_captor_logo.json,sha256=F5nhMzEyxKywtjvQqMTKgKRCJQYMDIiBgDSxdte8Clo,178
9
- openseries/plotly_layouts.json,sha256=MvDEQuiqIhMBXBelXb1sedTOlTPheizv6NZRLeE9YS4,1431
10
- openseries/portfoliotools.py,sha256=NMSp-dYjPRjBJpZ9W20IKDrQmBDk7e4qkTPT4QFx6io,19721
11
- openseries/report.py,sha256=iWe68o883EIU9B_t-61fl41wzTY2e6p_ZHgST2uoH3g,14393
12
- openseries/series.py,sha256=HT2U_gUhiZMhvt7hzpUPakKBEXI64Ur2WqoaUhXV11k,28925
13
- openseries/simulation.py,sha256=t2LFlAT9lcfPqqGEXOUoEgIG2gDEuGps3Qd3IgN_GLk,14359
14
- openseries-1.9.5.dist-info/LICENSE.md,sha256=wNupG-KLsG0aTncb_SMNDh1ExtrKXlpxSJ6RC-g-SWs,1516
15
- openseries-1.9.5.dist-info/METADATA,sha256=XYz8k9ujPY_MuwGjyHEyxyCgjKppszQJfmFq3tZ67U4,48301
16
- openseries-1.9.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
17
- openseries-1.9.5.dist-info/RECORD,,