Saravanan666/pypi-org huggingface dataset:
Package: cuda-mock
The plt hook technology used refers toplthookmock pytorch cuda runtime interfaceupdate submodulegit submodule update --init --recursivebuild wheel packagepython setup.py sdist bdist_wheeldirect installpip install dist/*.whlcollect cuda operator call stackfind nvcc installed pathwhich nvccreplace nvcc with my nvccmv /usr/local/bin/nvcc /usr/local/bin/nvcc_bchmod 777 tools/nvcccp tools/nvcc /usr/local/bin/nvccbuild and install pytorchbuild and install cuda_mockimport cuda_mock after import torchrun your torch train scriptwe will dump the stack into console收集cuda 算子调用堆栈找到nvcc安装路径which nvcc用我们的nvcc替换系统的nvcc（我们只是在编译选项加了-g）mv /usr/local/bin/nvcc /usr/local/bin/nvcc_bchmod 777 tools/nvcccp tools/nvcc /usr/local/bin/nvcc构建并且安装pytorch构建并且安装cuda_mock注意要在import torch之后import cuda_mock开始跑你的训练脚本我们将会把堆栈打印到控制台收集统计xpu runtime 内存分配信息/xpu_wait调用堆栈打印xpu_malloc调用序列，统计实时内存使用情况以及历史使用的峰值内存，排查内存碎片问题打印xpu_wait调用堆栈，排查流水中断处问题注意要在import torch/import paddle之后import cuda_mock; cuda_mock.xpu_initialize()使用方法:importpaddleimportcuda_mock;cuda_mock.xpu_initialize()# 加入这一行关闭打印backtrace（获取backtrace性能下降比较严重）export HOOK_DISABLE_TRACE='xpuMemcpy=0,xpuSetDevice=0'实现自定义hook函数实现自定义hook installer例子:classPythonHookInstaller(cuda_mock.HookInstaller):defis_target_lib(self,name):returnname.find("libcuda_mock_impl.so")!=-1defis_target_symbol(self,name):returnname.find("malloc")!=-1lib=cuda_mock.dynamic_obj(cpp_code,True).appen_compile_opts('-g').compile().get_lib()installer=PythonHookInstaller(lib)实现hook回调接口PythonHookInstaller构造函数需要传入自定义hook函数的库路径（绝对路径 并且 传入库中必须存在与要替换的函数名字以及类型一致的函数 在hook发生过程中，将会把原函数的地址写入以__origin_为开头目标symbol接口的变量中，方便用户拿到原始函数地址 参考:test/py_test/test_import_mock.py:15处定义）is_target_lib是否是要hook的目标函数被调用的libraryis_target_symbol是否是要hook的目标函数名字（上面接口返回True才回调到这个接口）new_symbol_name构造函数中传入共享库中的新的用于替换的函数名字，参数name：当前准备替换的函数名字dynamic_obj可以运行时编译c++ code，支持引用所有模块：logger、statisticsexamplepython test/test_import_mock.pydebugexport LOG_LEVEL=WARN,TRACE=INFO
Package: cudamps
Package DescriptionCUDAMPS is a Python interface to theCUDA Multi-Process Service.
It supports creation and management of MPS control daemons for multiple GPUs.PrerequisitesAt least one Tesla or Quadro GPU with compute capability 3.5 or later.CUDA7.0 or later.PyCUDA.Pytools.When used with Python 2.7,subprocess32is also required.InstallationThe package may be installed as follows:pip install cudampsUsageSee the filedemo.pyfor an example of how to use the package.DevelopmentThe latest release of the package may be obtained fromGitHub.AuthorSee the includedAUTHORS.rstfile for more information.LicenseThis software is licensed under theBSD License.
See the includedLICENSE.rstfile for more information.
Package: cudatree
CudaTree is an implementation of Leo Breiman’s Random Forests adapted to run on the GPU. A random forest is an ensemble of randomized decision trees which vote together to predict new labels. CudaTree parallelizes the construction of each individual tree in the ensemble and thus is able to train faster than the latest version of scikits-learn.Usageimport numpy as np
from cudatree import load_data, RandomForestClassifier
x_train, y_train = load_data("digits")
forest = RandomForestClassifier(n_estimators = 50, max_features = 6)
forest.fit(x_train, y_train)
forest.predict(x_train)DependenciesCudaTree is writen for Python 2.7 and depends on:scikit-learnNumPyPyCUDAParakeet
Package: cuddle
python-cuddleA Python library for theKDL Document Language.InstallpipinstallcuddleOr if you're using poetry:poetryaddcuddleCuddle supports Python 3.9 and above.UsagefromcuddleimportDocument,Node,NodeList,dumps,loadsloaded_doc=loads('''// Nodes can be separated into multiple linestitle\"Some title"// Nested nodes are fully supportedcontents {section "First section" {paragraph "This is the first paragraph"paragraph "This is the second paragraph"}}// Files must be utf8 encoded!smile "😁"// Instead of anonymous nodes, nodes and properties can be wrapped// in "" for arbitrary node names."!@#$@$%Q#$%~@!40" "1.2.3" "!!!!!"=true// The following is a legal bare identifier:foo123~!@#$%^&*.:'|/?+ "weeee"// And you can also use unicode!ノード　お名前="☜(ﾟヮﾟ☜)"// kdl specifically allows properties and values to be// interspersed with each other, much like CLI commands.foo bar=true "baz" quux=false 1 2 3''')print(dumps(loaded_doc))print()# Creating documents from scratch is a bit verbosenodes=[]child_node=Node("complex name here!",None)nodes.append(Node("simple-name",None,arguments=[123],children=[child_node]))nodes.append(Node("second-node",None,properties={"key":"value"}))node_list=NodeList(nodes)doc=Document(node_list)print(dumps(doc))The output:title "Some title"
smile "😁"
!@#$@$%Q#$%~@!40 !!!!!=true "1.2.3"
foo123~!@#$%^&*.:'|/?+ "weeee"
ノード お名前="☜(ﾟヮﾟ☜)"
foo bar=true quux=false "baz" 1 2 3

simple-name 123 {
  "complex name here!"
}
second-node key="value"LicenseThe code is available under theMIT license.
Package: cudnnenv
cudnnenvcudnnenv manages various versions of cuDNN.RequirementLinux, macOSPython 2.7, 3.7, 3.8, 3.9, 3.10InstallInstall cudnnenv via pip command.$ pip install cudnnenvDo not forget to set your environment variables.
cuDNN which cudnnenv installs locates at~/.cudnn/active/cuda.LD_LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LD_LIBRARY_PATH
CPATH=~/.cudnn/active/cuda/include:$CPATH
LIBRARY_PATH=~/.cudnn/active/cuda/lib64:$LIBRARY_PATHThis program usescurlandtarcommands.
Please install them before you use it.Usageusage: cudnnenv [-h]
                {install,install-file,activate,uninstall,version,versions,deactivate}
                ...positional arguments:{install,install-file,activate,uninstall,version,versions,deactivate}install:Install versioninstall-file:Install local cuDNN fileactivate:Activate installed versionuninstall:Uninstall versionversion:Show active versionversions:Show avalable versionsdeactivate:Deactivate cudnnenvoptional arguments:-h,--helpshow this help message and exitinstallinstallsubcommand installs a given version of cuDNN and activate it.
Useactivatesubcommand to only activate installed version.usage: cudnnenv install [-h] VERSIONpositional arguments:VERSION:Version of cuDNN you want to install and activate. Useversionssubcommand to check the available versions.install-fileinstall-filesubcommand installs a given local cuDNN file and activate it.
You can only install tar.gz file, can not use deb packages.usage: cudnnenv install-file [-h] FILE VERSIONpositional arguments:FILE:Path to local cuDNN archive file to installVERSION:Version name of cuDNN you want to installactivateactivatesubcommand activates an installed cuDNN.
This command does not download an archive file unlikeinstall.usage: cudnnenv activate [-h] VERSIONpositional arguments:VERSION:Version of installed cuDNN you want to activate.uninstalluninstallsubcommand uninstalls a given version of cuDNN from your environment.usage: cudnnenv uninstall [-h] VERSIONpositional arguments:VERSION:Version of cuDNN you want to uninstall.versionversionsubcommand shows the current activated version.
If you activate no version, it shows(none).usage: cudnnenv version [-h]versionsversionssubcommand shows the available versions which you can select ininstallsubcommand, and installed versions which you installed withinstallandinstall-filessubcommands.usage: cudnnenv versions [-h]deactivatedeactivatesubcommand deactivates cudnnenv by removing symbolic link.usage: cudnnenv deactivate [-h]Directory structure+ .cudnn
  + versions
  | + v2
  | | + cuda
  | |   + include
  | |   + lib64
  | + v3
  | + ...
  + active --> versions/vXLicensecudnnenv is distributed under MIT License.
Package: cudo-compute
Cudo ComputeTo use this client install cudoctl and run./cudoctl initfollow the steps to enter your API key and choose your project.Then when you call cudo_api in python it will grab your API key from the yaml file created by cudoctl.pipinstallcudo-computefromcudo_computeimportcudo_apiapi=cudo_api.virtual_machines()vms=api.list_vms(cudo_api.project_id())More examples of various api calls can be found inexamples.Advanced Users / DevelopmentThe code is generated by swagger codegen cli.Most code is generated in github actions see .github/workflows the generated code is put into a /src/cudo_compute directory
The code gets modified and the helpers get copied in from /helpers../codegen.shgenerates docs directory with source code and documentation.If you wish to customise how the API key or project is selected see the code in the helpers directory.
Package: cuecut
CueCutCut a CD image file by its cue file.InstallationpipinstallcuecutUsage1. PrerequisiteThere should exists an executableffmpeginPATH,
and the minimal Python/FFmpeg version that has been tested is 3.6.6/4.1 .2. Folder Struct.
├──xxx.cue
└──yyy.zzzWhereyyy.zzzis the name defined inxxx.cue3. Cut itcuecut/path/to/xxx.cue-cCodecYouLike
Package: cued-datalogger
Install the DataLogger by following the relevant instructions below.Then run the DataLogger from a command line using:cued_dataloggerTo specify a Workspace when running the DataLogger, use:cued_datalogger -w /path/to/workspace.wspFor further options type:cued_datalogger --helpFor a debugging version type:cued_datalogger_dbgSee thedocumentationfor more information.InstallationInstalling on WindowsDownload and installAnaconda / Miniconda.Check that your Anaconda is using the latest version ofpip. In an Anaconda Prompt, type:conda install pipInstallcued_dataloggerusingpip:pip install cued_dataloggerInstalling on OS XInstallportaudiowithbrew*:brew install portaudioInstallcued_dataloggerusingpip(from Terminal or from Anaconda Prompt or wherever):pip install cued_datalogger* If you do not have brew installed, installHomebrewthen permit it to run withxcode-select--installInstalling on LinuxInstall theportaudiodevelopment headers using your package manager.Debian / Ubuntu:sudo apt install libportaudio2 portaudio19-devCentOS:yum install portaudio portaudio-develInstallcued_dataloggerusingpip:pip install cued_datalogger
Package: cuefig
How to useCreateconfpackageCreateconf/config.py// OptionalCreateconf/config_deploy.py// OptionalAddlogging.yamlinconf// We have a default config, the logger file will write intologsdirectory as namemain.logFile Tree│   main.py├───conf│   │   config.py│   │   config_deploy.py│   │   logging.yaml│   │   __init__.py└───logsmain.logimportcuefigfromcuefigimportloggerif__name__=='__main__':logger.info("hi")print(f"username in conf/config.py:{cuefig.USERNAME}")print(f"password override in conf/config_deploy.py:{cuefig.PASSWORD}")print(f"Path var:{cuefig.ROOT_DIR}")Here you can see, the config variable becueas in very fast way.How to uploadpythonsetup.pydeploy
Package: cuellartensorflow
Una libreria simple para crear modelos de lenguaje de forma practica y sencilla usando tensorflow en pocas lineas de codigoinstalacion de la libreria:pipinstallcuellartensorflowCreando nuestro primer modelo:
el modelo se entrena con datos directos de wikipedia por lo que no es necesario descargar ningun dataset.fromcuellartensorflowimporttrain_language_modelmodelo=train_language_model(language="es",num_articles=10,num_epochs=10,batch_size=64)cambia el parametro "es" de la funcion  languaje="es"  para entrenar el modelo con un idioma distinto consulta la documentacion de wikipedia para mayor informacion, "num_articles" para especificar el numero de articulos a usar para el entrenamiento, "num_epochs" para especificar el numero de epocas a usar para el entrenamiento del modeloPara generar texto usando nuestro modelo recien creado puedes usar el siguiente codigo:fromcuellartensorflowimportgenerate_texttexto=generate_text(seed_text="La educacion",num_words=15,temperature=0.7)print(texto)usa el apartado "seed_text" para especificar la palabra semilla para generar texto a partir de ella, "num_words" sirve para especificar el numero de palabras a generar por el modelo
"temperature" controla la temperatura para la creatividad del modelola libreria es muy facil de usar para cualquier principiante que quiera crear su propio modelo de lenguaje de forma rapida y sencilla
Package: cuemby-equinix
Equinix Resource ProviderThe Equinix Resource Provider lets you manageEquinixresources.InstallingThis package is available for several languages/platforms:Node.js (JavaScript/TypeScript)To use from JavaScript or TypeScript in Node.js, install using eithernpm:npminstall@pulumi/equinixoryarn:yarnadd@pulumi/equinixPythonTo use from Python, install usingpip:pipinstallpulumi_equinixGoTo use from Go, usego getto grab the latest version of the library:gogetgithub.com/pulumi/pulumi-equinix/sdk/go/....NETTo use from .NET, install usingdotnet add package:dotnetaddpackagePulumi.EquinixConfigurationThe following configuration points are available for theequinixprovider:equinix:authToken(environment:METAL_AUTH_TOKEN) - This is your Equinix Metal API Auth token.equinix:clientId(environment:EQUINIX_API_CLIENTID) - API Consumer Key available under "My Apps" in developer portal.equinix:clientSecret(environment:EQUINIX_API_CLIENTSECRET) - API Consumer secret available under "My Apps" in developer portal.equinix:token(environment:EQUINIX_API_TOKEN) - API tokens are generated from API Consumer clients using the OAuth2 API.equinix:endpoint(environment:EQUINIX_API_ENDPOINT) - The Equinix API base URL to point out desired environment.ReferenceFor detailed reference documentation, please visitthe Pulumi registry.
Package: cuenca
Cuenca – Python client libraryInstallationpip install cuencaAuthenticationThe preferred way to configure the credentials for the client is to set theCUENCA_API_KEYandCUENCA_API_SECRETenvironment variables. The client
library will automatically configure based on the values of those variables.To configure manually:importcuencacuenca.configure(api_key='PKxxxx',api_secret='yyyyyy')JwtJWT tokens can also be used if your credentials have enough permissions. To
do so, you may include the parameteruse_jwtas part of yourconfigureimportcuencacuenca.configure(use_jwt=True)A new token will be created at this moment and automatically renewed before
sending any request if there is less than 5 minutes to be expired according
to its payload data.TransfersCreate transferimportcuencacuenca.configure(sandbox=True)# if using sandboxlocal_transfer_id='078efdc20bab456285437309c4b75673'transfer=cuenca.Transfer.create(recipient_name='Benito Juárez',account_number='646180157042875763',# CLABE or card numberamount=12345,# Mx$123.45descriptor='sending money',# As it'll appear for the customeridempotency_key=local_transfer_id)# To get updated statustransfer.refresh()Retrieve byidimportcuencatransfer=cuenca.Transfer.retrieve('tr_123')Query byidempotency_key,account_numberandstatusResults are always returned in descending order ofcreated_atThe methods that can be used:one()- returns a single result. RaisesNoResultFoundif there are no
results andMultipleResultsFoundif there are more than onefirst()- returns the first result orNoneif there aren't anyall()- returns a generator of all matching results. Pagination is handled
automatically as you iterate over the responsecount()- returns an integer with the count of the matching resultsimportcuencafromcuenca.typesimportStatus# find the unique transfer using the idempotency keylocal_transfer_id='078efdc20bab456285437309c4b75673'transfer=cuenca.Transfer.one(idempotency_key=local_transfer_id)# returns a generator of all succeeded transfers to the specific accounttransfers=cuenca.Transfer.all(account_number='646180157000000004',status=Status.succeeded)# the total number of succeeded transferscount=cuenca.Transfer.count(status=Status.succeeded)BalanceCurrent balanceimportcuenca# balance is the amount in centsbalance=cuenca.get_balance()Api KeysCreate newApiKeyand deactivate oldimportcuenca# Create new ApiKeynew=cuenca.ApiKey.create()# Have to use the new key to deactivate the old keyold_id=cuenca.session.auth[0]cuenca.session.configure(new.id,new.secret)cuenca.ApiKey.deactivate(old_id,60)# revoke prior API key in an hourLoginCreate a new passwordcuenca.UserCredential.create(password='1234567890')To update your passwordcuenca.UserCredential.update(password='1234567890')To reset passwordcuenca.UserCredential.update(password=None)Login in and outcuenca.UserLogin.create(password='1234567890')...# authenticated operationcuenca.UserLogin.logout()Create login token for biometrics# Must be logged incuenca.UserLogin.create(password='1234567890')token=cuenca.LoginToken.create()cuenca.UserLogin.logout()# Then you can use the token which lasts for 7 dayscuenca.configure(login_token=token)...# authenticated operation
Package: cuesdk
cue-sdk-pythonIntroThis repository is dedicated for acuesdkpackage onPyPIcuesdkpackage is actypes-based CUE SDK binding for Python 3Requirementscuesdkcan be used on the following platforms:Windows 7 (x64);Windows 8, 8.1 (x64);Windows 10 (x64);Windows 11 (x64);macOS 10.13;macOS 10.14;macOS 10.15;macOS 11;PrerequisitesPython 3.9 or higher. Support for earlier versions of Python is not provided. Python 2.7 or lower is not supported.WindowsiCUE for WindowsMicrosoft Visual C++ Redistributable for Visual Studio 2019.x64https://aka.ms/vs/17/release/vc_redist.x64.exemacOSiCUE for macOSInstallingYou can install the package fromPyPI:# Windows$py-3-mpipinstall-Ucuesdk# macOS$python3-mpipinstall-UcuesdkUsagefromcuesdkimport(CueSdk,CorsairDeviceFilter,CorsairDeviceType,CorsairError)sdk=CueSdk()defon_state_changed(evt):print(evt.state)err=sdk.connect(on_state_changed)details,err=sdk.get_session_details()print(details)devices,err=sdk.get_devices(CorsairDeviceFilter(device_type_mask=CorsairDeviceType.CDT_Keyboard))iferr==CorsairError.CE_Success:fordindevices:print(sdk.get_device_info(d.device_id))
Package: cue_sdk
cue_sdkPython wrapper for the CUE SDKOn PyPiInstallationUse pip$pipinstallcue_sdkUsage example>>>fromcue_sdkimport*# Load CUE DLL. Provide path to DLL yourself.>>>Corsair=CUESDK("CUESDK.x64_2013.dll")# Gives us exclusive access to controling the lighting and turns everything off.>>>Corsair.RequestControl(CAM.ExclusiveLightingControl)True# Sets the color of the H key to white.>>>Corsair.SetLedsColors(CorsairLedColor(CLK.H,255,255,255))True# Sets the color of the A and B key to green>>>Corsair.SetLedsColors([CorsairLedColor(CLK.A,0,255,0),CorsairLedColor(CLK.B,0,255,0)])True# Define a callback function for SetLedsColorsAsync>>>defexample_callback(context,result,error):...assertcontext=="test123"...print(context,result,error)...# Asynchronously set the color of the E key to white. Pass in a callback and an arbitrary context.>>>Corsair.SetLedsColorsAsync(CorsairLedColor(CLK.E,255,255,255),example_callback,"test123")True# (Note: The >>> appears before the result because it's async.)>>>test123TrueCE.Success# Returns number of Corsair devices.>>>Corsair.GetDeviceCount()1# Takes zero-based index of device and returns a namedtuple with the device info.>>>Corsair.GetDeviceInfo(0)CorsairDeviceInfo(type=<CDT.Keyboard:2>,model='K70 RGB',physicalLayout=<CPL.US:1>,logicalLayout=<CLL.NA:2>,capsMask=<CDC.Lighting:1>)# Returns a named tuple with the led positions + count of the keyboard.>>>Corsair.GetLedPositions(0)CorsairLedPositions(numberOfLed=111,pLedPosition=(CorsairLedPosition(ledId=<CLK.Escape:1>,top=29.0,left=7.0,height=13.0,width=13.0),...))# Returns the led id (CLK enum) for the key name. Relative to logical layout (e.g. on an AZERTY keyboard it will return Q, not A)>>>Corsair.GetLedIdForKeyName('a')<CLK.A:38># Performs protocol handshake and returns details. Already called when the CUE class is initialized, no need to call for it yourself.>>>Corsair.PerformProtocolHandshake()CorsairProtocolDetails(sdkVersion='1.15.28',serverVersion='1.16.42',sdkProtocolVersion=2,serverProtocolVersion=2,breakingChanges=False)# Protocol details are stored here when called handshake is performed on init.>>>Corsair.ProtocolDetailsCorsairProtocolDetails(sdkVersion='1.15.28',serverVersion='1.16.42',sdkProtocolVersion=2,serverProtocolVersion=2,breakingChanges=False)# Release control back to CUE.>>>Corsair.ReleaseControl(CAM.ExclusiveLightingControl)True
Package: cuevanalib
Cuevanalib is a library to retrieve contents (or its links)
fromcuevana.tvBefore version 0.6, it was part ofcuevanalinksproject,Source code and Issue Tracker:https://bitbucket.org/tin_nqn/cuevanalib/Dependeciescuevanalibscraps the web usingPyQuerywhich is based uponlxml.Everything is available viaeasy_installorpip
Package: cufinufft
cuFINUFFT v2.2 Python packageThe cuFINUFFT library is an efficient GPU implementation of the 1-, 2- and
3-dimensional nonuniform fast Fourier transform (NUFFT). It includes both type
1 (nonuniform to uniform) and type 2 (uniform to nonuniform) transforms.
It is based on theFINUFFTimplementation for the CPU. This package provides a Python interface to the
cuFINUFFT library, which is written in C++ and CUDA.For a mathematical description of the NUFFT and applications to signal
processing, imaging, and scientific computing, seethe FINUFFT
documentation. Usage examples can be foundhere.If you use this package, please cite our paper:Y. Shih, G. Wright, J. Andén, J. Blaschke, A. H. Barnett (2021).
cuFINUFFT: a load-balanced GPU library for general-purpose nonuniform FFTs.
arXiv preprint arXiv:2102.08463.(paper)(bibtex)Note: With version 2.2 of cuFINUFFT, we have changed the interfaces slightly to better align with FINUFFT. For an outline of the changes, please seethe migration guide.
Package: cuhk-seis
Install Anacondarun “conda create -n cuhk_seis python=3.7”run “conda activate cuhk_seis”run “pip install cuhk-seis”‘cd example’‘jupyter notebook’download EQTransofmer “https://github.com/smousavi05/EQTransformer.git” for more detailThis is a package for seismic data processing for earthquake location purpose. Developed by the CUHK Seismology Lab.
Package: cuia
cuia🧉A delightful tiny framework for building reliable text-based applications.cuiais a tiny Python library for building interactive terminal user
interfaces that are easy to use, fast and have a small memory footprint.cuia is inspired byBubble Tea(written inGo) and, in particular, employsthe Elm architecture(TEA, named
after theElm programming language). This means thatcuia applications are as dynamic and easy to write (and use) as they could
be.Features🧵 Simple: your user interface is a string of characters💬 Interaction-focused♻️ Easily integrate with other libraries🕹️ Use the same escape code sequencesas you would with Colorama🖥️ Support for Unix variants out of the box:cursesunder the hood by
default (and probably works on Windows and DOS if a compatible curses
library is available)🤬 Only one dependency:cusser(for
wrapping the curses library)🐍 Python 3.8+Installation$pipinstallcuiaUsageIn[1]:importasyncioIn[2]:fromdataclassesimportdataclassIn[3]:fromcuiaimportProgram,StoreIn[4]:@dataclass...:classHello(Store):...:...:x:int=0...:y:int=0...:...:def__str__(self):...:returnf"\033[{self.x};{self.y}H\033[1mHello, 🌍!"...:In[5]:program=Program(Hello(34,12))In[6]:asyncio.run(program.start())
Package: cuid
cuid.pyImplementation ofhttps://github.com/ericelliott/cuidin Python.Acuidis a portable and sequentially-ordered unique identifier designed for
horizontal scalability and speed -- this version is ported from the reference
implementation in Javascript.NOTE: Particularly if you have security concerns, thecuidstandard has been deprecated in favor ofcuid2!Tested on CPython 2.7, 3.6-3.11 as well as PyPy & PyPy3.Rough benchmarks on my machine (i7-8750H CPU @ 2.20GHz) usingsetup.py bench(which times the creation of 1 millioncuids):Versionns / cuidCPython 3.7.36095.257CPython 3.6.86846.050CPython 3.5.66604.012CPython 2.7.166913.681PyPy 7.1.1 (Python 2.7.13)326.344PyPy3 7.1.1 (Python 3.6.1)562.673(Note that timing the creation of fewer IDs changes the way PyPy runs the code, because of JIT warmup --
obviously creating this many IDs takes advantage of the warmed JIT)For now, this has no dependencies outside the standard library -- in time this may change,
to provide better random numbers and / or performance.