Skip to main content
torch.js has not been released yet.
torch.js logotorch.js logotorch.js
PlaygroundContact
Login
Documentation
IntroductionType SafetyTensor ExpressionsTensor IndexingEinsumEinopsAutogradTraining a ModelProfiling & MemoryPyTorch MigrationBest PracticesRuntimesPerformancePyTorch CompatibilityBenchmarksDType Coverage
airy_aibessel_j0bessel_j1bessel_y0bessel_y1chebyshev_polynomial_tchebyshev_polynomial_uchebyshev_polynomial_vchebyshev_polynomial_wentrerferfcerfcxerfinvgammaincgammaincchermite_polynomial_hhermite_polynomial_hei0ei1i1elaguerre_polynomial_llegendre_polynomial_plog_ndtrlogitmodified_bessel_i0modified_bessel_i1modified_bessel_k0modified_bessel_k1multigammalnndtrndtripolygammascaled_modified_bessel_k0scaled_modified_bessel_k1shifted_chebyshev_polynomial_tshifted_chebyshev_polynomial_ushifted_chebyshev_polynomial_vshifted_chebyshev_polynomial_wsincSpecialBinaryOptionsSpecialLogitOptionsSpecialPolynomialOptionsSpecialSoftmaxOptionsSpecialUnaryOptionsspherical_bessel_j0xlog1pyzeta
absacosacoshAdaptivePool1dShapeAdaptivePool2dShapeaddaddbmmAddbmmOptionsaddcdivAddcdivOptionsaddcmulAddcmulOptionsaddmmAddmmOptionsaddmvAddmvOptionsaddrAddrOptionsadjointallallcloseAllcloseOptionsAlphaBetaOptionsamaxaminaminmaxAminmaxOptionsangleanyapplyOutarangeare_deterministic_algorithms_enabledargmaxargminargsortargwhereas_stridedas_tensorasinasinhAssertNoShapeErrorAssertNotErrorAsStridedOptionsAtat_error_index_out_of_boundsatanatan2atanhatleast_1datleast_2datleast_3dAtShapeautocast_decrement_nestingautocast_increment_nestingautograd_gradient_mismatch_errorautograd_not_registered_errorAutogradConfigAutogradDeviceAutogradDTypeAutogradEntryAutogradHandleAutogradHandleImplAxesRecordBackwardFnbaddbmmBaddbmmOptionsbartlett_windowBaseKernelConfigbatch_dimensions_do_not_match_errorbernoulliBernoulliOptionsBinaryBackwardFnBinaryBroadcastResultBinaryDTypeBinaryKernelConfigCPUBinaryKernelCPUBinaryOpConfigBinaryOpNamesBinaryOpSchemaBinaryOptionsbincountBincountOptionsbitwise_andbitwise_left_shiftbitwise_notbitwise_orbitwise_right_shiftbitwise_xorblackman_windowblock_diagbmmBooleanDTypeRulebroadcast_error_incompatible_dimensionsbroadcast_shapesbroadcast_tensorsbroadcast_toBroadcastShapeBroadcastShapeRulebroadcastShapesbucketizeBucketizeOptionsBufferUsagebuildEinopsErrorbuildErrorMessagecanBroadcastTocartesian_prodcatCatOptionsCatShapeCauchyOptionscdistCdistOptionsceilceluCeluFunctionalOptionschain_matmulCheckShapeErrorCholeskyShapechunkchunk_error_dim_out_of_rangeChunkOptionsclampClampOptionsclear_autocast_cacheclearEinopsCacheclearEinsumCacheclonecolumn_stackcombinationsCombinationsOptionscompiled_with_cxx11_abicomplexconjconj_physicalcontiguousConv1dShapeConv2dShapeConv3dShapeConvTranspose2dShapecopysigncorrcoefcoscoshcount_nonzeroCountNonzeroOptionscovcoverage_reportcoverageReportCoverageReportCovOptionsCPUForwardFnCPUKernelConfigCPUKernelEntryCPUOnlyResultCPUTensorDatacreateCumExtremeResultcreateTorchCreationOpSchemaCumExtremeResultcummaxcummincumprodCumShapecumsumcumulative_trapezoidCumulativeOptionsCumulativeOptionsWithDimdeg2raddetachDeterministicOptionsDetShapeDevicedevice_error_requiresDeviceBufferDeviceCapabilitiesDeviceCheckedResultDeviceConfigDeviceContextDeviceEntryDeviceHandleDeviceInputDeviceOptionsDeviceRegistryDeviceTypediagdiag_embedDiagEmbedOptionsdiagflatDiagflatOptionsDiagFlatOptionsdiagonal_scatterDiagonalOptionsDiagonalScatterOptionsDiagOptionsDiagShapediffDiffOptionsdigammadimension_error_out_of_rangeDispatchConfigdistDistOptionsdivdotDotShapeRuleDoubleDoubleDimdropoutDropoutFunctionalOptionsdsplitdstackDTypedtype_already_registered_errordtype_components_mismatch_errordtype_not_found_errorDTypeComponentsDTypeConfigDTypeCoverageReportDTypeDisplayConfigDTypeEntryDTypeHandleDTypeHandleImplDTypeInfoDTypeRegistryDTypeRuleDTypeSerializationConfigDynamicShapeEigShapeeinops_error_ambiguous_decompositioneinops_error_anonymous_in_outputeinops_error_dimension_mismatcheinops_error_invalid_patterneinops_error_reduce_undefined_outputeinops_error_repeat_missing_sizeeinops_error_undefined_axiseinsumeinsum_error_dimension_mismatcheinsum_error_index_out_of_rangeeinsum_error_invalid_equationeinsum_error_invalid_sublist_elementeinsum_error_operand_count_mismatcheinsum_error_subscript_rank_mismatcheinsum_error_unknown_output_indexEinsumOptionsEinsumOutputShapeEllipsiseluelu_EluFunctionalOptionsembedding_bag_error_requires_2d_inputemptyempty_cacheempty_likeeqequalerferfcerfinvexpexp2expandexpand_asexpand_error_incompatibleExpandShapeexpm1ExponentialOptionseyeEyeOptionsfftFFTOptionsfindKernelWithPredicatefindSimilarPatternsflattenFlattenOptionsFlattenShapeflipflip_error_dim_out_of_rangefliplrFlipShapeflipudfloat_powerFloatDTypeRulefloorfloor_dividefmaxfminfmodformatEquationErrorformatShapefracfrexpfrombufferfullfull_likefunction_already_registered_errorFunctionConfigFunctionEntryFunctionHandlegathergather_error_dim_out_of_rangeGatherShapegcdgegeluGeometricOptionsget_autocast_cpu_dtypeget_autocast_gpu_dtypeget_autocast_ipu_dtypeget_autocast_xla_dtypeget_default_deviceget_default_dtypeget_deterministic_debug_modeget_device_configget_device_contextget_device_moduleget_dtype_infoget_file_pathget_float32_matmul_precisionget_num_interop_threadsget_num_threadsget_op_infoget_printoptionsget_real_dtypeget_rng_stategetAutogradgetDTypegetEinopsCacheSizegetEinsumCacheSizegetFunctiongetKernelgetMethodgetOpInfoGetOpKindGetOpSchemagetScalarKernelgluGluFunctionalOptionsGradContextGradFnGradientsForgtHalfHalfDimhamming_windowhann_windowhardshrinkhardsigmoidhardswishhardtanhhardtanh_HardtanhFunctionalOptionshas_autogradhas_devicehas_dtypehas_kernelhasAutogradhasDTypehasFunctionhasKernelhasMethodhasScalarKernelHasShapeErrorheavisidehistcHistcOptionshistogramHistogramOptionsHistogramResulthsplithstackhypoti0IdentityShapeifftimagindex_addindex_copyindex_fillindex_putindex_reduceindex_selectindex_select_error_dim_out_of_rangeIndexPutOptionsIndexSelectShapeIndexSpecIndicesOptionsIndicesSpecinitialize_deviceInputsForInsertDiminvalid_config_errorinverseInverseShapeirfftis_anomaly_check_nan_enabledis_anomaly_enabledis_autocast_cache_enabledis_autocast_cpu_enabledis_autocast_ipu_enabledis_autocast_xla_enabledis_complexis_complex_dtypeis_cpu_only_modeis_deterministic_algorithms_warn_only_enabledis_floating_pointis_floating_point_dtypeis_inference_mode_enabledis_nonzerois_tensoris_warn_always_enabledis_webgpu_availableIs2DIsAtLeast1DIsBinaryOpIsBinaryOpNameiscloseIscloseOptionsisfiniteisinisinfisnanisneginfisposinfisrealIsReductionOpIsReductionOpNameIsRegistryErrorIsShapeErroristftISTFTOptionsIsUnaryOpIsUnaryOpNameitem_error_not_scalarItemResultkaiser_windowKaiserWindowOptionskernel_not_registered_errorkernel_signature_mismatch_errorKernelConfigKernelConfigWebGPUKernelEntryKernelHandleKernelInfoKernelPredicateKernelRegistryKernelWebGPUkronkthvalueKthvalueOptionslcmldexpleleaky_reluleaky_relu_LeakyReluFunctionalOptionslerplevenshteinDistancelgammalinalg_error_not_square_matrixlinalg_error_requires_2dlinalg_error_requires_at_least_2dlinearlinspacelist_custom_deviceslist_custom_dtypeslist_deviceslist_dtypeslist_functionslist_kernelslist_methodslist_opslistCustomDTypeslistDTypeslistFunctionslistKernelsListKernelsOptionslistMethodslistOpsListOpsOptionsloglog_softmaxlog10log1plog2logaddexplogaddexp2logcumsumexplogical_andlogical_notlogical_orlogical_xorLogitOptionsLogNormalOptionsLogOptionslogsigmoidlogspacelogsumexpLogsumexpOptionsltLUShapeLuSolveOptionsmasked_fillmasked_selectmasked_select_asyncMaskSpecmatmulmatmul_error_inner_dimensions_do_not_matchMatmul2DShapeMatmulShapeMatmulShapeRuleMatrixTransposeShapemaxmaximummeanmedianmemory_statsmemory_summarymeshgridmethod_already_registered_errormethod_dtype_not_supported_errorMethodConfigMethodEntryMethodHandleminminimummishmmMMShapeRulemodemovedimmsortmulmultinomialmultinomial_asyncMultinomialAsyncOptionsMultinomialOptionsMultiplyBymvMVShapeRulenan_to_numnanmeannanmediannanquantileNanReductionOptionsnansumNanToNumOptionsnarrownarrow_copynarrow_error_length_exceeds_boundsnarrow_error_start_out_of_boundsNarrowShapeneneedsBroadcastnegNegativeDimnextafternonzeroNonzeroOptionsnormnormalNormalOptionsNormOptionsnumelonesones_likeop_kind_mismatch_errorop_not_found_errorOpCoverageEntryOpInfoOpKindOpNameOpSchemaOpSchemasouterOuterShapepackPackShapepermutepermute_error_dimension_count_mismatchPermuteShapepoissonpolarPool1dShapePool2dShapePool3dShapepositivepowpreluPrintOptionsprodprofiler_allow_cudagraph_cupti_lazy_reinit_cuda12promote_typesPromoteDTypeRulePutOptionsquantileQuantileOptionsrad2degrandrand_likerandintrandint_likeRandintLikeOptionsRandintOptionsrandnrandn_likeRandomLikeOptionsRandomOptionsrandpermRangeSpecRankravelrealrearrangeRearrangeOptionsRearrangeShapereciprocalreduceReduceOperationReduceOptionsReduceShapeReductionKernelConfigCPUReductionKernelCPUReductionOpNamesReductionOpSchemaReductionOptionsReductionShapeRuleregister_backwardregister_deviceregister_dtyperegister_forwardregister_functionregister_methodregister_scalar_forwardregisterAutogradRegisterBackwardOptionsregisterBinaryOpregisterDTypeRegisterDTypeOptionsRegisteredDTyperegisterFunctionRegisterFunctionOptionsregisterKernelRegisterKernelOptionsregisterMethodRegisterMethodOptionsregisterScalarKernelregisterUnaryOpregistration_failed_errorrelurelu_relu6ReluFunctionalOptionsremainderRemoveDimrepeatrepeat_interleaveRepeatInterleaveOptionsRepeatOptionsRepeatShapeReplaceDimrequireWebGPUreset_peak_memory_statsreshapeReshapeShaperesult_typerfftrollRollOptionsrot90Rot90Optionsroundrrelurrelu_RreluFunctionalOptionsrsqrtSafeExpandShapeSameDTypeRuleSameShapeRuleSaveForBackwardScalarCPUForwardFnScalarCPUKernelConfigScalarKernelEntryScalarKernelHandleScalarWebGPUKernelConfigScaleDimscatterscatter_addscatter_add_scatter_error_dim_out_of_rangescatter_reducescatter_reduce_ScatterReduceOptionsScatterShapesearchsortedSearchSortedOptionsselectselect_error_index_out_of_boundsselect_scatterSelectShapeseluset_default_deviceset_default_tensor_typeset_deterministic_debug_modeset_float32_matmul_precisionset_printoptionsset_warn_alwaysSetupContextFnShapeShapeCheckedResultShapedTensorShapeErrorMessageShapeOpSchemaShapeRulesigmoidsignsignbitsilusinsincsinhSizeOptionsslice_error_out_of_boundsslice_scatterSliceOptionsSliceScatterOptionsSliceShapeSliceSpecsoftmaxsoftmax_error_dim_out_of_rangeSoftmaxShapesoftminSoftminFunctionalOptionssoftplusSoftplusFunctionalOptionssoftshrinksoftsignsortSortOptionssplitsplit_error_dim_out_of_rangeSplitOptionssqrtsquaresqueezeSqueezeOptionsSqueezeShapestackStackOptionsStackShapestdstd_meanStdVarMeanOptionsStdVarOptionsstftSTFTOptionsStrideOptionssubSublistSublistElementSubscriptIndexsumSVDShapeswapaxessym_floatsym_intsym_notttaketake_along_dimTakeAlongDimOptionstantanhtanhshrinktensortensor_splitTensorCreatorTensorDatatensordotTensordotOptionsTensorLikeTensorMetaTensorOptionsTensorStoragethresholdthreshold_tileTileShapeToOptionstopkTopkOptionsTorchtraceTraceShapetransposetranspose_dims_error_out_of_rangetranspose_error_requires_2d_tensorTransposeDimsShapeTransposeDimsShapeCheckedTransposeShapetrapezoidTrapezoidOptionsTriangularOptionstriltril_indicesTriOptionsTripletriutriu_indicestrue_dividetruncTupleOfLengthTypedArrayTypedArrayForTypedStorageTypeOptionsUnaryBackwardFnUnaryDTypeUnaryKernelConfigCPUUnaryKernelCPUUnaryOpConfigUnaryOpFnUnaryOpNamesUnaryOpParamsUnaryOpSchemaUnaryOptionsunbindunbind_error_dim_out_of_rangeUnbindOptionsunflattenUniformOptionsuniqueunique_consecutiveUniqueConsecutiveOptionsUniqueOptionsunpackUnpackShapeunravel_indexunregister_deviceunsqueezeUnsqueezeOptionsUnsqueezeShapeuse_deterministic_algorithmsValidateBatchedSquareMatrixValidateChunkDimValidatedEinsumShapevalidateDeviceValidateDeviceValidatedRearrangeShapeValidatedReduceShapeValidatedRepeatShapevalidateDTypeValidateEinsumValidateOperandCountValidateRanksValidateScalarValidateSplitDimValidateSquareMatrixValidateUnbindDimValueOptionsvar_var_meanvdotviewview_as_complexview_as_realvmapvsplitvstackWebGPUKernelConfigWebGPUOnlyResultWebGPUTensorDatawhereWindowOptionsxlogyzeroszeros_like
torch.js· 2026
LegalTerms of UsePrivacy Policy
/
/
  1. docs
  2. torch.js
  3. torch
  4. special
  5. polygamma

torch.special.polygamma

function polygamma<S extends Shape>(n: number, input: Tensor<S, 'float32'>, _options?: SpecialUnaryOptions<S>): Tensor<S, 'float32'>

Computes the n-th derivative of the digamma function.

The polygamma function ψ^(n)(x) = d^n/dx^n ψ(x) (n-th derivative of digamma) appears throughout Bayesian statistics and variational inference. Essential for:

  • Variational inference: computing KL divergences for conjugate priors (gamma, Dirichlet, Wishart)
  • Bayesian deep learning: gradient-based posterior approximation, ELBO optimization, reparameterization
  • Statistical learning: maximum likelihood estimation with gamma/Dirichlet, moment matching
  • Approximate inference: black-box variational inference, gradient estimators for discrete latent variables
  • Optimization: parameterized exponential families, natural gradient descent in information geometry
  • Risk modeling: loss function derivatives, portfolio optimization with risk measures
  • Probabilistic modeling: graphical models with continuous latent variables, deep generative models

Hierarchy of Derivatives: n=0 is digamma ψ(x), n=1 is trigamma ψ'(x), n≥2 are higher polygammas. Each order adds new structure: trigamma controls variance in Bayesian updates, higher orders affect higher cumulants.

Central to Exponential Families: Log-partition function of gamma/Dirichlet/Wishart involves log Γ(x); digamma ψ and polygamma ψ^(n) encode mean/variance/cumulants of natural parameter space.

ψ(n)(x)=dndxnψ(x)where ψ(x)=ddxlog⁡Γ(x)=Γ′(x)Γ(x)n=0 (Digamma): ψ(x)=−γ+∑k=0∞1k+1−1k+x(γtextEuler−Mascheroni)n=1 (Trigamma): ψ′(x)=∑k=0∞1(k+x)2n≥2 (Polygamma): ψ(n)(x)=(−1)n+1n!sumk=0∞frac1(k+x)n+1Recurrence/series: ψ(n)(x+1)=ψ(n)(x)+(−1)nn!/xn+1quadtext(duplicationformula)textAsymptotic:psi(n)(x)sim(−1)n+1n!/xn+1quadtextasxtoinfty\begin{aligned} \psi^{(n)}(x) = \frac{d^n}{dx^n} \psi(x) \quad \text{where } \psi(x) = \frac{d}{dx} \log \Gamma(x) = \frac{\Gamma'(x)}{\Gamma(x)} \\ \text{n=0 (Digamma): } \psi(x) = -\gamma + \sum_{k=0}^\infty \frac{1}{k+1} - \frac{1}{k+x} \quad (\gamma \\text{ Euler-Mascheroni}) \\ \text{n=1 (Trigamma): } \psi'(x) = \sum_{k=0}^\infty \frac{1}{(k+x)^2} \\ \text{n≥2 (Polygamma): } \psi^{(n)}(x) = (-1)^{n+1} n! \\sum_{k=0}^\infty \\frac{1}{(k+x)^{n+1}} \\ \text{Recurrence/series: } \psi^{(n)}(x+1) = \psi^{(n)}(x) + (-1)^n n! / x^{n+1} \\quad \\text{(duplication formula)} \\ \\text{Asymptotic: } \\psi^{(n)}(x) \\sim (-1)^{n+1} n! / x^{n+1} \\quad \\text{as } x \\to \\infty \end{aligned}ψ(n)(x)=dxndn​ψ(x)where ψ(x)=dxd​logΓ(x)=Γ(x)Γ′(x)​n=0 (Digamma): ψ(x)=−γ+k=0∑∞​k+11​−k+x1​(γtextEuler−Mascheroni)n=1 (Trigamma): ψ′(x)=k=0∑∞​(k+x)21​n≥2 (Polygamma): ψ(n)(x)=(−1)n+1n!sumk=0∞​frac1(k+x)n+1Recurrence/series: ψ(n)(x+1)=ψ(n)(x)+(−1)nn!/xn+1quadtext(duplicationformula)textAsymptotic:psi(n)(x)sim(−1)n+1n!/xn+1quadtextasxtoinfty​
  • Order n=0: Digamma ψ(x) = d/dx log Γ(x); fundamental special function related to derivatives of gamma
  • Order n=1: Trigamma ψ'(x) = variance term in exponential family distributions; appears in Hessian of ELBO
  • Higher orders (n≥2): Higher cumulants; rarely needed but appear in refined approximations
  • Digamma properties: ψ(1) = -γ (Euler constant), ψ(n+1) = ψ(n) + 1/n (recurrence), ψ(1/2) = -2 ln(2) - γ
  • Digamma connection to means: ψ(α) = E[log X] for X ~ Gamma(α, β); fundamental for variational inference
  • Trigamma positivity: ψ'(x) 0 for all x 0; related to log-concavity of Γ
  • Asymptotic series: ψ(x) ~ log(x) - 1/(2x) - 1/(12x²) + ... for large x (used for numerics)
  • Domain x 0 required: Undefined for x ≤ 0 (poles and singularities); handle carefully
  • Poles at negative integers: If input contains negative integers, results are NaN/Inf
  • Numerical stability for small x: For x 0.1, use asymptotic series or transformation; forward recurrence
  • Large n polygamma: Higher orders decay as 1/x^n+1; may underflow for large n and moderate x

Parameters

nnumber
Order of derivative (non-negative integer). n=0 gives digamma ψ(x), n=1 gives trigamma ψ'(x), n≥2 higher derivatives
inputTensor<S, 'float32'>
Input tensor x. Must be x 0 for mathematical convergence. Can be scalar or Tensor
_optionsSpecialUnaryOptions<S>optional

Returns

Tensor<S, 'float32'>– Tensor with ψ^(n)(x) values

Examples

// Order 0: digamma function ψ(x)
const x = torch.linspace(0.1, 3, 5);
const digamma = torch.special.polygamma(0, x);  // ψ(x) = d/dx log Γ(x)
// digamma(1) ≈ -0.5772 (Euler-Mascheroni constant)
// digamma(2) ≈ 0.4228
// digamma(3) ≈ 0.9227

// Order 1: trigamma function ψ'(x)
const trigamma = torch.special.polygamma(1, x);  // ψ'(x) = d²/dx² log Γ(x)
// trigamma(1) = π²/6 ≈ 1.6449 (Basel problem!)
// Appears as variance term in Dirichlet/Gamma variational inference

// Variational inference: KL divergence for gamma distributions
// KL(q_gamma || p_gamma) involves digamma differences and trigamma variance
const alpha_q = torch.tensor([2.0, 3.0, 5.0]);  // Variational parameters
const beta_q = torch.tensor([1.0, 1.0, 1.0]);   // Rate parameters
const digamma_term = torch.special.polygamma(0, alpha_q);  // E[log X] in variational
const trigamma_term = torch.special.polygamma(1, alpha_q);  // Variance correction
// KL divergence uses these to compute E_q[log q(x)] - E_q[log p(x)]

// Dirichlet variational autoencoder: softmax approximation
const alpha = torch.tensor([1.0, 2.0, 3.0, 4.0]);  // Dirichlet concentration parameters
const psi_alpha = torch.special.polygamma(0, alpha);  // Digamma ψ(α_k)
const psi_sum = torch.special.polygamma(0, alpha.sum());  // Digamma ψ(Σ α_k)
const mean_logp = psi_alpha.sub(psi_sum);  // E_Dirichlet[log p_k] (variational bound)
// Entropy and KL divergence computations use these expectations

// Higher order: tetragamma (n=2)
const x_point = torch.tensor([2.0]);
const polygamma_order2 = torch.special.polygamma(2, x_point);  // ψ''(x)
// Fourth cumulant-related term; less common but appears in high-order approximations

// Optimization dynamics: natural gradient in exponential family
const param = torch.tensor([0.5, 1.0, 2.0, 5.0]);
const fisher_info = torch.special.polygamma(1, param);  // Trigamma = Fisher information for gamma
// Natural gradient descent step uses fisher_info^{-1} * gradient

// Batch computation: different orders
const x_batch = torch.tensor([1.0, 2.0, 3.0]);
const digamma_batch = torch.special.polygamma(0, x_batch);  // [ψ(1), ψ(2), ψ(3)]
const trigamma_batch = torch.special.polygamma(1, x_batch);  // [ψ'(1), ψ'(2), ψ'(3)]
// Forms basis for gradient-based inference algorithms

// Domain and asymptotics
const x_small = torch.tensor([0.1]);  // Near 0: large negative (digamma)
const x_large = torch.tensor([100.0]);  // Large x: rapidly decays
const psi_small = torch.special.polygamma(0, x_small);  // Large negative ~ -1/x + γ
const psi_large = torch.special.polygamma(0, x_large);  // ~ log(x)
// Asymptotic behavior: ψ(x) ~ log(x) - 1/(2x) as x → ∞

See Also

  • PyTorch torch.special.polygamma()
  • torch.special.digamma - Digamma function (special case n=0, convenience alias)
  • torch.lgamma - Log-gamma function log Γ(x) (zeroth antiderivative of digamma)
  • torch.special.multigammaln - Multivariate log-gamma (uses polygamma for derivatives)
Previous
ndtri
Next
scaled_modified_bessel_k0