Skip to main content

NF6X's misc. electrical engineering related tools.

Reason this release was yanked:

Left debugging print() in place

Project description

nf6x_eetools: NF6X's misc. electrical engineering related tools.

This Python package is a collection of miscellaneous tools I've created for my general electrical engineering related tasks. I use them in scripts and in interactive ipython shells.

EngFormatter

EngFormatter extends the standard string.Formatter class to support new Format Specification Mini Language types which are handy for component values, electrical measurements, etc.:

type description
i "engineering" format with specified digits of precision and SI unit prefix
I "engineering" format with specified digits of presions and SI word prefix

These two variants both format numbers with coefficients in the range of [1...1000), an SI prefix, and a specified total number of significant digits. Rounding is performed with the decimal.Decimal() class, using decimal.ROUND_HALF_UP. This handles significant digits in much the same way that HP scientific calculators do.

The top level package creates variable eformat as a shortcut to the format() method of an EngFormatter instance. It also provides the eng() function as a shortcut for interactive use.

For example:

>>> import nf6x_eetools as ee
>>> print(ee.eformat('R{:d} = {:3i}Ω', 123, 12345))
R123 = 12.3 kΩ
>>> print(ee.eformat('V1 = {:+2I}volt', 0.012345))
V1 = +12 millivolt
>>> ee.eng(12345)
'12.3 k'
>>> ee.eng(12345, 2, 'V')
'12 kV'

E3, E6, E12, E24, E48, E96, E192(value, unit='Ω')

These classes find the nearest IEC 60063:2015 standard component value to a specified ideal value. See E series of preferred numbers for reference.

When cast to a str, the approximated value will be formatted with EngFormatter using an appropriate number of significant digits for the series and appending SI units.

For example, to print the standard 1% tolerance resistor value closest to 50 ohms, along with its tolerance and nominal error from the ideal value:

>>> import nf6x_eetools as ee
>>> r = ee.E96(50)
>>> print(f'{str(r)} ±{r.tolerance():%} ({r.error():+.2%} error)')
49.9 Ω ±1% (-0.20% error)

ratio(v1, v2, maxsteps=1)

Find a pair of standard component values approximating a ratio.

I typically use this for tasks such as finding standard resistor values to use in a resistor divider setting the output voltage of a regulator.

Given two values v1 and v2, ratio() finds two nearby standard component values which most closely match the ratio of the ideal values. If the passed values are derived from Eseries, then the chosen value will be in the same series, within +/- maxsteps of the nearest standard value. If either passed value is not derived from Eseries, then E96 (±1%) values will be used.

maxsteps must be an integer >= 1.

Returns tuple of (w1, w2, error) where w1 and w2 are the new approximate values, and error is defined as:

                (w1.approx() / w2.approx())
error = 1.0  -  ---------------------------
                 (v1.exact() / v2.exact())
>>> import nf6x_eetools as ee
>>> r1_ideal = 1.23456E3
>>> r2_ideal = 6.54321E5
>>> (R1, R2, error) = ee.ratio(ee.E96(r1_ideal), ee.E96(r2_ideal))
>>> print(f'R1 = {str(R1)}')
R1 = 1.21 kΩ
>>> print(f'R2 = {str(R2)}')
R2 = 634 kΩ
>>> print(f'error = {error:+.2%}')
error = -1.15%

divider(v_in, v_out, r_total=E96(10000), maxsteps=1)

Design a resistor divider using standard values.

For the passed input voltage v_in and output voltage v_out, divider() designs a resistor divider using standard component values to produce v_out from v_in. The top and bottom resistors will add up to approximately r_total, and will be in the same series as r_total. If r_total is not an Eseries subclass, then E96 (±1%) values will be used. maxsteps determines how many standard value steps the top and bottom resistors may deviate from their initial approximations. Increasing maxsteps tends to reduce the v_out error and increase the deviation from r_total.

Returns a tuple of (r_top, r_bot, error), with error defined by:

error = (v_out_actual - v_out)/v_out

frac(value, denominator=64, rounding=0, correction=True)

Find nearest fractional dimension to provided value.

Returns a string representation of a fractional dimension approximating the provided value.

Argument Description [default]
value Numeric value to be approximated
denominator Fractional denominator prior to reduction [64]
rounding Round normally if 0; round up if positive; round down if negative [0]
correction Include correction for original value [True]

drill(diameter, margin=0, showdiam=True, table=drill_table)

Return string representing nearest American drill size. See Drill bit sizes for reference.

For a given diameter, return a string representing the nearest American twist drill size.

Argument Description [default]
diameter Hole diameter to be approximated
margin If 0, return nearest size; if > 0, return equal or larger size; if < 0, return equal or smaller size [0]
showdiam If True, include actual diameter in returned string [True]
table Drill table to use [drill_table]

Four drill tables are currently defined:

Table Description
fractional_drill_table Fractional inch drill sizes
number_drill_table Number gauge drill sizes
letter_drill_table Letter gauge drill sizes
drill_table Combined table of all drill sizes

For example:

>>> import nf6x_eetools as ee
>>> ee.drill(0.256)
'F (0.257 in)'
>>> ee.drill(0.256, 1)
'F (0.257 in)'
>>> ee.drill(0.256, -1)
'1/4in (0.25 in)'

Building and Installing from Source

After cloning the source code repository, build with the python build package, and then install the generated wheel file with pip. For example:

python3 -m build
python3 -m pip install dist/nf6x_eetools-1.0-py3-none-any.whl

(change the version number in the .whl path to point to the generated wheel file)

Running Tests on the Source Code

To run lint on the code, install pylint and run it from the top directory:

pylint ./src ./tests

To run regression tests, install pytest and pytest-cov, and run pytest from the top directory:

pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nf6x_eetools-1.0.tar.gz (25.8 kB view details)

Uploaded Source

Built Distributions

nf6x_eetools-1.0-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

nf6x_eetools-1.0-1-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

Details for the file nf6x_eetools-1.0.tar.gz.

File metadata

  • Download URL: nf6x_eetools-1.0.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for nf6x_eetools-1.0.tar.gz
Algorithm Hash digest
SHA256 3097c126e854a4e9be58b6c1aa7a49e5ed76d526484d0384b97f5b6d890589dd
MD5 8c109fb6a4c6982297f576fb75e8b305
BLAKE2b-256 0a050cf5d0562bff9e88a2dfe8e8212a701374abbe4d64820f1e5e965e1916d0

See more details on using hashes here.

File details

Details for the file nf6x_eetools-1.0-py3-none-any.whl.

File metadata

  • Download URL: nf6x_eetools-1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for nf6x_eetools-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 78129340c65bc028252d1c277e62ee2aab630688209495c6a6a74b4259b55f40
MD5 023784b32e079600db0b6f27cfca002f
BLAKE2b-256 1414159d675b300a02b1a302bf9b0e3e1dd1e8b1a2fc8f20f6c24fb70dd26dfb

See more details on using hashes here.

File details

Details for the file nf6x_eetools-1.0-1-py3-none-any.whl.

File metadata

  • Download URL: nf6x_eetools-1.0-1-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for nf6x_eetools-1.0-1-py3-none-any.whl
Algorithm Hash digest
SHA256 5355125f45565877a1219272ae0a2387f4838bd6340f66e235bdb36e3c82d3ab
MD5 e42ecaa97c05132323f9a25a169e0b81
BLAKE2b-256 4b6b3e9fe4b1066884b5703e373516f4b967cac54a2b7140aca0fc2ae3947594

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page