Skip to main content

Metricus

made-with-python PyPi license Open Source? Yes!

Getting Started • Collaborators • Contribute • License • Preview

This Python-based unit converter is a simple and efficient tool for converting measurements between various units, such as force, length, mass, and others, including complex operations like displacement. It features an intuitive graphical user interface built with Tkinter, allowing users to navigate and perform conversions easily. The converter returns precise results, formatted with or without the unit abbreviation for easy readability.

🚀 Getting started

pip install metricus

Usage Example

from Metricus.gui import MetricusGUI
from Metricus import temperature_converter
from Metricus.utilities import round_number, humanize_input, decomputarize_input, plot_temperature_variation

# ----------------------------
# Temperature Conversion Example
# ----------------------------
temp_celsius = 25
temp_rankine = temperature_converter(temp_celsius, 'celsius', 'rankine')
print(f"{temp_celsius} degrees Celsius equals {temp_rankine} Rankine")

# ----------------------------
# Time Conversion Examples
# ----------------------------

# Example 1: Basic usage
time_seconds = 3600
time_hours = time_converter(time_seconds, 'second', 'hour')
print(f"{time_seconds} seconds equals {time_hours} hours")

# Example 2: Using rounded_result
time_days = 365
time_year = time_converter(time_days, 'day', 'year', rounded_result=True)
print(f"{time_days} days equals {time_year} year")

# Example 3: Using humanized_input
time_years = 100
time_century = time_converter(time_years, 'year', 'century', humanized_input=True)
print(f"{time_years} years equals {time_century} century")

# ----------------------------
# Displacement Calculation Example
# ----------------------------
length_kilometers = 100
speed_kmh = 100
time_unit = 'minute'
result = calculate_displacement(length=length_kilometers, speed=speed_kmh, time_unit=time_unit)
print(f"Covering {length_kilometers} km at a speed of {speed_kmh} km/h takes {result} minutes.")

# ----------------------------
# Number Rounding Example
# ----------------------------
# Rounding a numeric result
time_days = 365
time_result = time_converter(time_days, 'day', 'year')
rounded_number = round_number(time_result)
print(f"The number {time_result} rounded is {rounded_number}")

# Rounding a string result
time_result_with_unit = time_converter(time_days, 'day', 'year', with_unit=True)
rounded_number_with_unit = round_number(time_result_with_unit)
print(f"The number {time_result_with_unit} rounded is {rounded_number_with_unit}")

# ----------------------------
# Humanizing and Decomputadorizing Input
# ----------------------------
from_acceleration = 'Meter per second squared'
to_acceleration = 'Foot per second squared'

# Humanizing input
acceleration_result = acceleration_converter(
    100,
    humanize_input(from_acceleration),
    humanize_input(to_acceleration)
)
print(f"The conversion result from {from_acceleration} to {to_acceleration} is {acceleration_result}")

# Decomputadorizing input
decomputarized_from = decomputarize_input(humanize_input(from_acceleration))
decomputarized_to = decomputarize_input(humanize_input(to_acceleration))
print(f"The decomputarized input from '{humanize_input(from_acceleration)}' is '{decomputarized_from}'")
print(f"The decomputarized input to '{humanize_input(to_acceleration)}' is '{decomputarized_to}'")

# ----------------------------
# Temperature Variation Plotting Examples
# ----------------------------
# Daily temperatures for 30 days (based on the provided list)
temperatures = [
    15.3, 16.1, 14.8, 13.5, 12.4, 11.8, 13.0, 15.5, 16.2, 14.9,
    13.0, 12.5, 11.6, 13.4, 15.1, 11.0, 17.2, 18.5, 19.0, 18.3,
    17.8, 16.4, 15.0, 14.2, 13.6, 12.7, 13.8, 14.5, 15.2, 16.0
]

# Example 1: Basic usage - Plot in Celsius with statistical info
plot_temperature_variation(
    temperatures=temperatures,
    temperature_unit='celsius'
)

# Example 2: Convert temperatures to Fahrenheit
plot_temperature_variation(
    temperatures=temperatures,
    temperature_unit='celsius',
    convert_to='fahrenheit'
)

# Example 3: Disable statistical information
plot_temperature_variation(
    temperatures=temperatures,
    temperature_unit='celsius',
    convert_to='fahrenheit',
    with_info=False
)

# Example 4: Save the graph to a file
plot_temperature_variation(
    temperatures=temperatures,
    temperature_unit='celsius',
    convert_to='fahrenheit',
    save_path='temperature_variation.png'
)

# Example 5: Save graph in Kelvin with statistics
plot_temperature_variation(
    temperatures=temperatures,
    temperature_unit='celsius',
    convert_to='kelvin',
    save_path='temperature_variation_kelvin.pdf',
    with_info=True
)

# ----------------------------
# Launching the Graphical Interface
# ----------------------------
MetricusGUI()

🌟 Preview

Below is a preview of the Metricus graphical user interface (GUI):

Simple Conversions:

Metricus GUI

Complex Conversions:

Metricus GUI

The GUI is built with Tkinter and provides an intuitive way to perform unit conversions quickly and accurately.

Prerequisites

  • Python 3.8+
  • Matplotlib

Cloning

git clone https://github.com/guifreschi/Metricus

Starting

Clone the repository git clone https://github.com/guifreschi/Metricus

Navigate into the project directory cd Metricus

Create a virtual environment python -m venv venv

Activate the virtual environment

  • On Windows venv\Scripts\activate
  • On Unix or MacOS source venv/bin/activate

Install Metricus pip install -e .

🤝 Collaborators

This project is maintained and created by:

Guilherme Freschi Profile Picture
Guilherme Freschi
Yaron Buchler Profile Picture
Yaron Buchler

📫 Contribute

  1. git clone https://github.com/guifreschi/Metricus
  2. git checkout -b feature/NAME
  3. Follow commit patterns
  4. Open a Pull Request explaining the problem solved or feature made, if exists, append screenshot of visual modifications and wait for the review!

Documentations that might help

📝 How to create a Pull Request

💾 Commit pattern

📝 License

This project is licensed under the MIT License. See the LICENSE file for details.

Release files for metricus 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metricus 1.0.5
File Size Uploaded
metricus-1.0.5.tar.gz 49.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for metricus 1.0.5
File Interpreter ABI Platform
metricus-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 160.1 kB

Release files / metricus-1.0.5.tar.gz

Download URL metricus-1.0.5.tar.gz
Size 49.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cfd67b97445582d1e3be4e435de47799a2a81528c59c3ca6e81e754723949cbe
BLAKE2b-256 checksum
How to use checksums
2d12c9877da9090e168bd867216e333f46ec9027656cd8ef82bb28b2abbbe01c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.4

Release files / metricus-1.0.5-py3-none-any.whl

Download URL metricus-1.0.5-py3-none-any.whl
Size 110.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3dfbfd4980cf8db37605adae603bc1a52c26d89682af0373ae3a8e95ab5f410a
BLAKE2b-256 checksum
How to use checksums
90a2305d8a5dd931b33c02c5d2c903dbafbcb577ed20bc811718048a8ae8c0af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.4

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.11

2 release files

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page