Change Log¶
Version 7.1¶
Released on 2026-10-16.
Version 7.1 is a significant release in the 7.x branch. It contains a number of new features, improvements, and bug fixes.
Highlights
New estimators and tests:
IVJIVE, first-stage rank tests, a centered J test, the Hausman and Pesaran CD tests for panel models, and panel models that only have effects.Many technical corrections change the numbers that that were produced in 7.0. The most important of these include changes to the default bandwidth of the kernel estimators of
IVGMM,IVGMMCUEandIVSystemGMM, the Fama-MacBeth p-values and the weighted panel and system models. See Changes that alter results.Increased reliability of weighted estimators including testing post-estimation statistics for correctness with weights.
Inputs with labels must have the same index as
dependent(or as the first input with labels) in every estimator, and input of the wrong type now raises a clearTypeErrororValueError. See Backward-incompatible changes.Python 3.15 is supported. 7.1 is the final release to support Python 3.10 and NumPy 1.x.
New features
Added
IVJIVE, the jackknife IV estimator (JIVE1), with unadjusted, robust, kernel and one-way clustered covariances. The bandwidth of its kernel covariance is selected from the data, as inIV2SLSandIVLIML. Two-way clusters raise aValueError. It can be imported fromlinearmodels(GH750, GH763, GH765).Added the Cragg-Donald and Kleibergen-Paap tests of the rank of the first-stage coefficients, as properties of
FirstStageResultsand as functions that can be imported fromlinearmodels.iv(GH741, GH622, GH765).Added
centered_j_stat, a J test of the overidentifying restrictions that uses a centered moment covariance (GH749, GH763).Added
extra_dfto the covariance estimators oflinearmodels.iv.covarianceand to thecov_configofIV2SLS.fitandIVLIML.fit. It is the number of degrees of freedom that the model uses in addition to itskregressors. Withdebiased=Truethe covariance is scaled byn / (n - k - extra_df), and aValueErroris raised if none are left (GH778, GH833).Added
hausman(), the Hausman test of random effects against fixed effects. It matches Stata andplm::phtest, returnsHausmanTestResults, a named tuple of the statistic and the table of estimates, and raises aValueErrorif the models differ in observations, dependent variable or weights (GH740, GH761).Added
pesaran_cd, the Pesaran CD test of cross-sectional dependence, a newNormalTestStatistic. It uses the idiosyncratic shocks, which forFirstDifferenceOLSare the residuals of the differenced equation (GH739, GH771).pesaran_cdis anInapplicableTestStatisticforBetweenOLS,FamaMacBeth, models with time effects or other effects that change over time, andFirstDifferenceOLSwith two periods. Time dummies among the regressors invalidate it and are not detected (GH761, GH771).PanelOLSestimates models that only have effects,y = a_i + g_t + e, with anexogthat has no columns or the formula"y ~ EntityEffects". These raised pandas’ “No objects to concatenate” (GH809).A
PeriodIndexof time labels is accepted by the panel models and converted to timestamps (GH810).Lists, tuples and other
array_likeobjects are accepted for everyarray_likeparameter of the IV, absorbing, system, asset pricing and panel models, includingclusters,weightsandother_effects. 7.0 raisedAttributeError: 'list' object has no attribute 'ndim'for many of them.dummy_matrixaccepts lists and tuples of category codes (GH776).1-d arrays are accepted as the
clustersandother_effectsof the panel models, and asweightswith a value for each row of an unbalanced panel. A one-column DataFrame of panel weights is accepted: with the default index it is read like an array, otherwise by its labels.BetweenOLSandFirstDifferenceOLSaccept text and categoricalclusters(GH776, GH825, GH833).The names of options are not case sensitive:
cov_type,weight_typeandkernelin every model, themethodofAbsorbingLS.fit, thegroupofPanelDataand thedropofdummy_matrix.cov_type="Robust"andkernel="Bartlett"give the results of the lower case names. 7.0 used LSMR formethod="HDFE"(GH783, GH833, GH836).linearmodels.iv.commonandlinearmodels.iv.resultsdefine__all__, so thatimport *no longer imports the modules and functions that they import (GH765).
Changes that alter results¶
durbin()andwu_hausman()ofIV2SLSandIVLIMLproject the residuals on all of the instruments, as documented (GH725).The specification tests of weighted IV models (
sargan,basmann,durbin,wu_hausman,wooldridge_*andc_stat) use the weights, which 7.0 ignored (GH737).c_stat()of overidentifiedIVGMMandIVGMMCUEmodels uses the correct moment conditions and theweight_typeof the model. 7.0 ignored the weight type (GH744).IVGMMCUEcenters the moment conditions by default, as documented. With the new default bandwidth (below) the J statistic of themrozexample with kernel weights goes from 0.775 to 0.379 and the coefficient oneducfrom 0.0419 to 0.0637. Passcenter=Falseandoptimal_bw=Falseto get the 7.0 results (GH746).The default bandwidth of the kernel estimators of
IVGMMandIVGMMCUEis selected from the data. 7.0 usednobs - 2, and the 95% intervals covered 64% to 70% with a kernel covariance and 51% to 56% with kernel weights and covariance in a simulation (92% to 95% now). In themrozexample the bandwidth goes from 426 to 3 and the J statistic ofIVGMMfrom 0.797 to 0.377 (GH794).A model that uses the default bandwidth issues a
DefaultBandwidthWarning. Passoptimal_bw=False(orbandwidth=nobs - 2) to get the 7.0 numbers, oroptimal_bw=Trueto silence the warning.IVGMMCUEestimates the bandwidth once, from the first step residuals, so its results withoptimal_bw=Truechange slightly (GH794).The default bandwidth of the kernel weight matrix of
IVSystemGMMis selected from the data, with the same warning and the sameoptimal_bw=Falseto restorenobs - 2. In a simulation with AR(1) errors the 5% J test never rejected valid instruments in 7.0, and rejects 2% to 5% of the time now (GH794).IVGMMraises aValueErrorwhen the covariance of the moment conditions is singular, which happens with too few clusters. 7.0 returned meaningless estimates.IVGMMCUEraises it instead ofLinAlgError, and also for as many clusters as moment conditions withcenter=False.c_statis anInvalidTestStatisticif its model has too few clusters (GH754, GH785).IVGMMResults.weight_configis thedictof the weight configuration. 7.0 returned the name of the weight type, which isweight_type(GH747).IVGMMCUEresults reportIV-GMM-CUEas the estimator (method, the summary andcompare) instead ofIV-GMM(GH753).The weights of the IV models are scaled to a mean of 1 after the observations with missing values are dropped.
resid_ss,s2,total_ssandwresidswere off by the ratio of the means of the weights (1.0023 in a simulation). Only models with both weights and missing values change (GH776).The Anderson-Rubin and Basmann F tests are an
InvalidTestStatistic, andIVLIMLraises, when kappa cannot be estimated from so few observations. 7.0 returned its rounding error (GH824).Every R-squared is NaN, with no error or warning, if the total sum of squares of the dependent variable is zero, for example if it is constant. 7.0 raised a
ZeroDivisionError, or returned -inf or rounding noise (GH814).p-values use the survival function, so p-values below about 1e-16 are no longer 0. Tiny p-values print in scientific notation in first-stage summaries and
compare()(GH742).AbsorbingLS(debiased=True)counts the absorbed terms in the small-sample adjustment, asPanelOLSdoes. The standard errors are larger, by 7.7% for the Grunfeld data with firm and year effects.debiased=Falseis unchanged (GH778).The regressors that the effects absorb in
AbsorbingLSandPanelOLSare found with a relative tolerance of 1e-5. 7.0 kept some of them, with huge standard errors, and depended on the units. With a constant,drop_absorbed=Truekeeps the constant, andabsorbed_effectsisfitted_values - exog @ params(GH779, GH786).AbsorbingLS(drop_absorbed=True)finds the constant among the regressors that it keeps. If a regressor before the constant was dropped, 7.0 took the wrong column as the constant, which gave a wrongabsorbed_rsquaredand F statistic (0.1662 and 61.13 instead of 0.5170 and 324.63 in an example), or aTypeErrorif the constant was last (GH779).PanelOLS(drop_absorbed=True)with entity effects and a constant now drops the regressors if none of them varies within entities. 7.0 kept them (GH730).Repeated calls to
AbsorbingLS.fitno longer changedf_model,df_residand the adjusted R-squared of later fits, and use themethodandabsorb_optionsof each call (GH735, GH752).FirstDifferenceOLSdifferences in time order and only adjacent periods. 7.0 differenced against non-adjacent periods if the first entity enters late or has a gap (GH726, GH813).Weighted
RandomEffectsscales the entity means by the root weights, which changes its estimates, R-squared and F statistic (GH738).The variance components of
RandomEffectsuse the ranks of the within and between regressions as degrees of freedom, as plm and Stata do. Models with regressors that are constant within entities change slightly (theta 0.6429 instead of 0.6451 in the wage panel), and so doessmall_sample=True(GH798).The classical F statistic of weighted panel models (and of
RandomEffectson unbalanced panels) was wrong by a factor of about 4 in the wage panel withhoursas weights. The fit measures of weightedFamaMacBethno longer depend on the scale of the weights (R-squared -2183 instead of 0.0033) (GH797).The log-likelihood of weighted panel models includes the term 0.5 sum(ln w), as statsmodels’
WLSdoes. It goes from -3065.75 to -3153.16 forPooledOLSin the wage panel withhoursas weights (GH815).PanelOLSscales the weights after it drops singletons, which changess2only (GH833).Panel weights given by period, by entity or as a table are placed by label. 7.0 used the wrong rows unless the data was sorted by entity and then by period. Clusters and other effects given as a table of time periods by entities are placed in the same way, and work on unbalanced panels (GH748, GH822).
The panel models can combine
clusterswithout the labels ofdependentwithcluster_entity=Trueorcluster_time=True. 7.0 gave wrong standard errors without an error (GH776).cov_type="ac"of the panel models sums the products of the scores over entities, as plm and statsmodels do, so unbalanced panels change (7% in an example). Entities that are shorter than the bandwidth keep the weights of the kernel (0.4% to 11% in a panel of short entities) (GH800, GH813).PanelOLSwith two cluster variables no longer depends on their order. The degrees of freedom are corrected if the effect is nested in the last variable but not the first (7% in an example) (GH795).FamaMacBethp-values and confidence intervals use a t distribution with T - 1 degrees of freedom, anddf_residis T - 1, where 7.0 usednobs - nvarfor both (the p-value ofunionin the wage panel goes from 7e-20 to 4e-5).debiased=Falseis unchanged (GH772).The
f_statistic_robustofFamaMacBethis Hotelling’s test, which rejected a true null 20% to 41% of the time in 7.0. It is anInvalidTestStatisticif the number of periods is not larger than the number of tested parameters, where 7.0 inverted a singular covariance (GH772, GH796).Models fit with
check_rank=Falseuse the number of columns as the rank, and constants that are not columns (dummies that sum to one) are detected exactly. R-squared values were wrong (0.2942 instead of 0.1877 in one example). A column that varies by less than 1.5e-8 of its size is read as a constant (GH799, GH812).Weighted
SURandIV3SLSwith GLS use the weighted residuals in the robust, kernel and clustered covariances, which were wrong, mostly too small (by 5% to 10% in an example) (GH787).Weighted
SUR,IV3SLSandIVSystemGMMreportresidsthat are alwaysy - x b, and compute the R-squared, adjusted R-squared and system R-squared measures,breusch_paganandlikelihood_ratiofrom the weighted residuals, which 7.0 mixed with unweighted ones (GH784).Weighted
IV3SLSuses a weighted first stage, which changes its estimates.IVSystemGMMis unchanged (GH734). The defaultunadjustedcovariance ofSURandIV3SLSwithiterate=Trueuses the final residual covariance (GH736).IV3SLSuses GLS (3SLS) when the equations have the same regressors but different instruments, where 7.0 used equation by equation 2SLS (GH793).nobsof the results ofSUR,IV3SLSandIVSystemGMMis the number of observations of each equation, not of all equations (360 for 3 equations with 120 observations).df_residis unchanged (GH803).The J statistic of
LinearFactorModeluses the rank of the pricing errors, and rejected a correct model too often (12.5% at the 5% level in a simulation, 10% now) (GH805).The standard errors of the alphas of
LinearFactorModelGMMaccount for the estimation of the parameters and were up to 3 times too large. The risk premia block ofcovofTradedFactorModelwithdebiased=Truedivides bynobs - 1(GH805).The t-statistic and p-value of an asset pricing parameter with a standard error of 0, such as the alphas of a just identified model, are NaN. 7.0 reported an infinite t-statistic and a p-value of 0 (GH805).
LinearFactorModelGMMreports the J statistic of the minimized CUE objective (0.5% to 8% smaller), and itsstd_errorstable is laid out correctly: in 7.0 most cells held the standard error of another parameter (GH781, GH788).
Backward-incompatible changes
Inputs with labels, such as a pandas
SeriesorDataFramewith an index, must have the same index asdependentin every IV, absorbing, system, asset pricing and panel model. Ifdependenthas no labels, the first input with labels is the reference. 7.0 paired inputs with different labels by position without an error (GH748, GH756, GH776).Inputs whose labels do not match raise a
ValueError: reindex the input, or use.to_numpy()to pair by position. NumPy arrays and pandas objects with the default index0, 1, ..., n-1have no labels and are still paired by position. The same dates stored at different resolutions are the same labels (GH820).A system of equations whose equations have different numbers of observations raises a
ValueErrorwhen the model is created (GH756).Input that cannot be used raises a
TypeErrororValueErrorthat names the input: complex values (7.0 dropped the imaginary part with aComplexWarning), text that is not a number, objects that are notarray_like, and a paneldependentorexogthat is not a pandas, xarray or NumPy panel object, such as a list (GH776).clusterswith 3 or more columns raise aValueErrorinIV2SLS,IVLIMLandAbsorbingLS, which ignored the others, andIVGMMandIVGMMCUEaccept a single column. Weights given as the name of a column tofrom_formularaise aTypeError. Text columns ofabsorbandinteractionsofAbsorbingLSraise aTypeError(GH259, GH776).The
weightsof thefrom_formulaof the system models must be dictionary-like, such as adictor aDataFrame, with the equation labels as keys. 7.0 ignored other containers with a warning (GH776).Weights that are zero, negative or infinite raise a
ValueErrorin every model (the system models name the equation). 7.0 accepted zero weights inAbsorbingLSand the system models, and failed with unclear errors for negative weights there and for infinite weights in every model. A missing weight still drops the observation (GH776, GH792, GH799, GH811).Options are checked at the start of
fit, and kernels when the model is created. A keyword argument thatcov_typedoes not accept raises oneValueErrorin every model with**cov_config(7.0 raisedTypeErrorin IV, absorbing and system models; asset pricing ignored it). An unknowngroupofPanelDataand a panelpredictwithoutexogordataraise too (GH822, GH833).dummy_matrixraises aValueErrorfor adropother than"first"or"last". It treated any other value as"last"(GH835, GH836).Panel models raise a
ValueErrorfor duplicated (entity, time) rows, which 7.0 treated as separate observations, and aValueErrorif the bandwidth of a Driscoll-Kraay or Fama-MacBeth kernel covariance is not below the number of periods. The quadratic spectral kernel returned standard errors that were too small instead (GH810, GH813).Kernel estimators that select the bandwidth from the data need at least 4 observations (Bartlett), 5 (Parzen) or 6 (quadratic spectral), and raise a
ValueErrorwith fewer. 7.0 returned a bandwidth ofT - 1or anOverflowError. This includesIVGMMwith its new default bandwidth (GH821).IVLIMLraises “Unable to estimate kappa” when there are too few observations for the cross product that LIML inverts. 7.0 returned the rounding error as kappa (for example 0.8125 instead of 1 with 3 observations) (GH824).AbsorbingLS.fitraises aValueErrorfor amethodother than"auto","hdfe"and"lsmr", which used LSMR, forabsorb_optionsthat belong to the other algorithm, and forlsmr_optionswithmethod="hdfe"(7.0:TypeErrororRuntimeError). TheFutureWarningforlsmr_optionsnow says to useabsorb_optionswithmethod="lsmr"(GH752, GH783).A debiased
AbsorbingLScovariance raises aValueErrorif the regressors and the absorbed terms leave no degrees of freedom (GH778).Panel models raise a
ValueErrorthat says why when they cannot be estimated, where 7.0 raisedZeroDivisionErrororLinAlgError: no residual degrees of freedom and aBetweenOLSwith regressors that are collinear in the entity means (GH799).IV, system and panel models raise a
ValueErrorif the cluster ids are a single group or have missing values. 7.0 returned a wrong covariance or raisedZeroDivisionError, and panel models made the missing ids a cluster of their own. The ids of observations that are dropped for other missing values may be missing (GH789, GH845).LinearFactorModelGMMraises aValueErrorwhen the model is created if there are not more observations than moment conditions. AsigmaofLinearFactorModelthat is not symmetric and positive definite, and a saturated debiased asset pricing model, raise aValueError(GH802, GH807).The default
eval_envofpredictof the IV models is 2, the frame that calls it, where 7.0 used 4. A helper function that relied on the old default to reach the frame above it needseval_env=3(GH774).With SciPy 2, the sparse helpers (
Interaction.sparse,dummy_matrixand others) return sparse arrays, where*is elementwise. Use@for matrix products (GH733).
Bug fixes
Fixed
predict()for models without exogenous or without endogenous regressors (GH677).A missing value in the entity or time index of a panel raises a clear
ValueErrorin every panel model and in the group methods ofPanelData. 7.0 raised aLinAlgErroror returned NaN or wrong data (GH614, GH716, GH764).Fixed
AbsorbingLSwith missing values, which raised aValueErrorin every release since 4.13. The incomplete observations are now dropped with aMissingValueWarning. With clustered covariances,clustersmust have one row for each remaining observation (GH766).Fixed
AbsorbingLSwith anInteractionin which onlycatorconthas labels,AbsorbingLS.fitaddingdrop_singletonsto theabsorb_optionsthat were passed to it, andfitwith the deprecatedlsmr_optionsand the default method, which raised aTypeErrorwhen pyhdfe is used (GH752, GH756).Fixed
Interaction.nobs, which kept the number of observations beforeInteraction.drop, and the cache ofAbsorbingLS, which gave a model the residuals of another model that was fit with different LSMRabsorb_options(GH752, GH783).quadratic_form_testraises aTypeErrorinstead of anAssertionErrorifformulais used withparamsthat is not aSeries(GH690).A
cov_type,weight_typeorkernelthat is not supported raises anUnknownOptionError(both aValueErrorand aKeyError) that suggests the closest name and lists the supported names, in every model. 7.0 raised a bareKeyErrorin many (GH808).The
predictmethod of the IV models withdataevaluates the formula in the frame that calls it, and works at the top level of a script. Missing values in the dependent variable, the endogenous regressors or the instruments of an IV or system formula are dropped with a warning (GH774).from_formulaof the asset pricing models evaluates the formulas in the namespace of the caller, and drops the observations with missing values.multivariate_ivacceptsendogandinstrumentswithoutexog(GH777, GH801, GH804).Fixed
LinearFactorModelGMMignoringopt_optionsafter the first step, theOverflowErrorof summaries with an infinite t-statistic, such as that of a system whose equation fits exactly (an asset pricing t-statistic is NaN where the standard error is 0), and theRuntimeWarningof the asset pricing models for variances that are zero up to rounding (GH788, GH802, GH805).The adjusted R-squared of an IV model with as many parameters as observations is NaN, and the pooled F of
PanelOLSwith a zero residual sum of squares and the F statistic with a singular covariance are anInvalidTestStatistic. These raised errors. Weights of any finite size are scaled without overflow (GH811, GH814).PanelOLS(singletons=False)with clustered covariances,RandomEffectswith arrays,FirstDifferenceOLSwith array clusters andPanelOLSwith entity and time effects for a single entity no longer fail withIndexError,KeyErroror a misleadingValueError. A missing value inother_effectsdrops the observation (GH776, GH795, GH799, GH810).The
df_modelofBetweenOLSresults is anint, where 7.0 returned the tuple(k,)(GH799).Fixed the time labels of a 3-d
xarray.DataArraywithdatetime64[ns]coordinates, which were integers such as946684800000000000, and theSettingWithCopyWarningof pandas 2 in the clusters ofPanelOLS(GH809, GH822).IVSystemGMM(weight_type="kernel").fit(iter_limit=1)no longer raises anAssertionError,generate_panel_dataaccepts a NumPyGeneratorand returnsclusterswith one row for each observation, and the helpershas_constant,get_floatandget_boolaccept several constant columns, NumPy integers and NumPy booleans (GH775, GH794, GH799).The Fama-MacBeth error for a panel that cannot be estimated says what a cross-section needs, and its kernel covariance no longer issues a
RuntimeWarningbefore theValueErrorfor an estimate that does not vary (GH772, GH826).Fixed the LaTeX output of
Summary, which did not escape special characters such as underscores in the extra text (GH791).Fixed the
devextra, which listedpandas-stubsl, and added xarray to thetestextra (GH757).
Documentation and maintenance
Corrected the Driscoll-Kraay index in the math documentation, fixed typos and improved the type annotations (GH704, GH697, GH721). Added a security policy (
SECURITY.md) (GH757).The docstrings follow the numpydoc rules, which are checked by a lint, and say which option names are accepted, that they are not case sensitive, and where
extra_dfis accepted. The panelfitexamples run as they are, and the documentation builds without warnings (GH759, GH767, GH828, GH829, GH830, GH833, GH834).New and extended pages of the user guide: aligning inputs, the mathematics of
IVJIVE, the J and C statistics and the specification tests, the panel specification tests, small-sample adjustments, estimated effects andWARN_ON_MISSING, which turns off theMissingValueWarning(GH531, GH773, GH782).The IV and panel example notebooks show the new features and the corrected statements (GH770, GH790).
The tests do not leak warnings with any supported combination of versions, and the minimum versions of statsmodels (0.14.6) and pyhdfe (0.2.0) were raised for this (GH751, GH826).
The tests compare floating-point results with a tolerance, since their last digits differ between platforms, and the CI also tests a wheel on Intel macOS (GH846).
The type annotations describe what the code accepts and returns:
ArrayLikeincludes lists and tuples, andfitted_values,estimated_effectsandidiosyncraticof the panel results areDataFrame. A GitHub workflow runs mypy, for information only (GH842, GH843).
Compatibility
Python 3.10 to 3.15, NumPy 1.23.5 and later including NumPy 2, and pandas 1.4.0 and later including pandas 3 are supported (GH757).
7.1 was tested on Linux, macOS and Windows, from Python 3.10 with the minimum versions (NumPy 1.23.5, SciPy 1.8.0, pandas 1.4.0, statsmodels 0.14.6) to Python 3.15 with NumPy 2.5.4, SciPy 1.18.1, pandas 3.0.6 and statsmodels 0.15.0, and with the development versions of NumPy, SciPy, pandas and statsmodels.
Wheels are built for CPython 3.10 to 3.15 on manylinux (x86-64 and aarch64), musllinux (x86-64), Windows (AMD64) and macOS (x86-64 and arm64). There are no wheels for the free-threaded builds (3.14t and 3.15t) or Windows ARM64. Wheels are built against NumPy 2 and run with NumPy 1.23.5 or later.
Ready for SciPy 2 and pandas 4: the deprecation warnings that 7.0 gave with their development versions are gone (GH733).
The tests of the oldest supported versions now install them (GH751).
Deprecations and future changes
7.1 is the last release to support Python 3.10 and NumPy 1.x. Later releases will raise the minimum versions of Python, NumPy and the other dependencies.
The
lsmr_optionsargument offit()and thelinearmodels.__future__.orderingmodule will be removed in 8.0. Importing the module now emits aFutureWarning(GH752).DROP_MISSINGand the environment variableLINEARMODELS_DROP_MISSINGhave never had an effect, since observations with missing values are always dropped. ReadingDROP_MISSING, or importinglinearmodelswith the variable set, emits aFutureWarning, and both will be removed in 8.0. UseWARN_ON_MISSINGto turn off theMissingValueWarning(GH531, GH782).DROP_MISSINGis no longer inlinearmodels.__all__, soimport *does not bind it (GH782).DefaultBandwidthWarning, whichIVGMM,IVGMMCUEandIVSystemGMMissue when a kernel estimator uses the default bandwidth, which changed in 7.1, will be removed in 8.0. Passingbandwidthoroptimal_bwsilences it (GH794).
Minimum versions
Unchanged (Python 3.10, SciPy 1.8.0, pandas 1.4.0, formulaic 1.2.1) except NumPy, which moved from 1.22.3 to 1.23.5, statsmodels, which moved from 0.13.0 to 0.14.6, the first release that imports with pandas 3, and pyhdfe, which moved from 0.1 to 0.2.0 (0.1.0 and 0.1.1 fail on NumPy 1.24 to 1.26). The 7.0 notes listed NumPy 1.23.5 and formulaic 1.0.0, but 7.0 required 1.22.3 and 1.2.1 (GH776, GH826).
packagingis now a declared dependency. Building from source requires Cython 3.1.0, and running the tests requires pytest 9 and xarray (GH757).The
docanddevextras require numpydoc 1.10, and thedocextra NumPy 1.23.5 and statsmodels 0.14.6. Thedocextra no longer pinspandas~=2.3.3or listspatsyandoldest-supported-numpy(GH757, GH826, GH838).
Contributors
Thanks to shaneraphel (GH725, GH726, GH730), raashish1601 (GH734, GH735, GH736, GH737, GH738), nyxst4ck (GH704), shuxue6662-a11y (GH716), aeshef (GH690), maxime2476 (GH697) and omadson (GH791).
The new features complete earlier pull requests by hass-nation (GH701, GH702, GH703), AyuG619 (GH713), eirki (GH249) and shaneraphel (GH731).
Version 7.0¶
Increased minimums:
Python: 3.10
formulaic: 1.0.0
NumPy: 1.23.5
SciPy: 1.8.0
pandas: 1.4.0
statsmodels: 0.13.0
Corrected name of clustered covariance to
"clustered"from"cluster".Fixed an issue sparse matrix behavior changed in SciPy.
Switched to meson build system.
Improved compatibility with future NumPy (2.4+) and pandas (3+) changes.
Fixed a bug that affected estimation of
SURmodels with constraints of the formR beta = qwhereqwas not 0.