Created by: NicoLuaJIT/NicoAdresse (Nico Erdmann) on 12.07.2026 (Sunday)
This is a hobby project intended to help me practice working with larger codebases and improve my Git workflow.
Take everything here with a grain of salt.
Current Version: v1.0.8.1
IrcoPy is a high-school physics calculator covering topics ranging from Electricity to Waves. It is designed to demonstrate fundamental principles across multiple fields of physics, including Mechanics, Energy, Gravity, Rotational Dynamics, and Waves.
Every class is wrapped inside the namespace of its respective domain.
Every calculation function returns a value, usually double (Python: float), since result is represented using that type.
These instructions will get a copy of the project running on your local machine for development and testing purposes.
- Python Interpreter (recommended version >= 3.9)
- The
pippackage manager
- G++, Clang, or another C++ compiler (recommended version >= C++23)
- CMake
- Clone the repository:
git clone https://github.com/NicoAdresse/IrcoPy.git- Build the project:
Remove-Item build\ -Recurse
New-Item -Name "build" -ItemType Directory
cd build\
cmake ..
cmake --build .
.\app.exeor run RUN.ps1.
Example:
# src/main.py
import ircopy as irc
def main() -> None:
density: irc.Density = irc.Density()
density.calculate_density(2.0, 5.0, True)
if __name__ == "__main__":
main()IrcoPy/
├── bindings
│ ├── bind_main_module.cpp
│ ├── Electricity
│ │ ├── bind_capacitance.cpp
│ │ ├── bind_capacitor_energy.cpp
│ │ ├── bind_charge.cpp
│ │ ├── bind_coulombs_law.cpp
│ │ ├── bind_ohms_law.cpp
│ │ └── bind_power.cpp
│ ├── Energy
│ │ ├── bind_efficiency.cpp
│ │ ├── bind_heat_energy.cpp
│ │ ├── bind_kinetic_energy.cpp
│ │ └── bind_potential_energy.cpp
│ ├── Gravity
│ │ ├── bind_escape_velocity.cpp
│ │ ├── bind_gravitational_acceleration.cpp
│ │ ├── bind_gravitational_force.cpp
│ │ ├── bind_gravitational_potential_energy.cpp
│ │ ├── bind_kelpers_third_law.cpp
│ │ └── bind_orbital_velocity.cpp
│ ├── Mechanics
│ │ ├── bind_acceleration.cpp
│ │ ├── bind_average_velocity.cpp
│ │ ├── bind_density.cpp
│ │ ├── bind_force.cpp
│ │ ├── bind_hookes_law.cpp
│ │ ├── bind_momentum.cpp
│ │ ├── bind_power.cpp
│ │ ├── bind_pressure.cpp
│ │ ├── bind_torque.cpp
│ │ ├── bind_weight.cpp
│ │ └── bind_work.cpp
│ ├── Rotational_Dynamics
│ │ ├── bind_angular_acceleration.cpp
│ │ ├── bind_angular_velocity.cpp
│ │ └── bind_rotational_energy.cpp
│ └── Waves
│ ├── bind_frequency.cpp
│ ├── bind_period.cpp
│ └── bind_wave_speed.cpp
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── impl
│ ├── Electricity
│ │ ├── impl_capacitance.cpp
│ │ ├── impl_capacitor_energy.cpp
│ │ ├── impl_charge.cpp
│ │ ├── impl_coulombs_law.cpp
│ │ ├── impl_ohms_law.cpp
│ │ └── impl_power.cpp
│ ├── Energy
│ │ ├── impl_efficiency.cpp
│ │ ├── impl_heat_energy.cpp
│ │ ├── impl_kinetic_energy.cpp
│ │ └── impl_potential_energy.cpp
│ ├── Gravity
│ │ ├── impl_escape_velocity.cpp
│ │ ├── impl_gravitational_acceleration.cpp
│ │ ├── impl_gravitational_force.cpp
│ │ ├── impl_gravitational_potential_energy.cpp
│ │ ├── impl_keplers_third_law.cpp
│ │ └── impl_orbital_velocity.cpp
│ ├── Helper
│ │ └── helper_funcs.hpp
│ ├── Mechanics
│ │ ├── impl_acceleration.cpp
│ │ ├── impl_average_velocity.cpp
│ │ ├── impl_density.cpp
│ │ ├── impl_force.cpp
│ │ ├── impl_hookes_law.cpp
│ │ ├── impl_momentum.cpp
│ │ ├── impl_power.cpp
│ │ ├── impl_pressure.cpp
│ │ ├── impl_torque.cpp
│ │ ├── impl_weight.cpp
│ │ └── impl_work.cpp
│ ├── Rotational_Dynamics
│ │ ├── impl_angular_acceleration.cpp
│ │ ├── impl_angular_velocity.cpp
│ │ └── impl_rotational_energy.cpp
│ └── Waves
│ ├── impl_frequency.cpp
│ ├── impl_period.cpp
│ └── impl_wave_speed.cpp
├── include
│ ├── Electricity
│ │ ├── inc_capacitance.hpp
│ │ ├── inc_capacitor_energy.hpp
│ │ ├── inc_charge.hpp
│ │ ├── inc_coulombs_law.hpp
│ │ ├── inc_ohms_law.hpp
│ │ └── inc_power.hpp
│ ├── Energy
│ │ ├── inc_efficiency.hpp
│ │ ├── inc_heat_energy.hpp
│ │ ├── inc_kinetic_energy.hpp
│ │ └── inc_potential_energy.hpp
│ ├── Gravity
│ │ ├── inc_escape_velocity.hpp
│ │ ├── inc_gravitational_acceleration.hpp
│ │ ├── inc_gravitational_force.hpp
│ │ ├── inc_gravitational_potential_energy.hpp
│ │ ├── inc_kelpers_third_law.hpp
│ │ └── inc_orbital_velocity.hpp
│ ├── Mechanics
│ │ ├── inc_acceleration.hpp
│ │ ├── inc_average_velocity.hpp
│ │ ├── inc_density.hpp
│ │ ├── inc_force.hpp
│ │ ├── inc_hookes_law.hpp
│ │ ├── inc_momentum.hpp
│ │ ├── inc_power.hpp
│ │ ├── inc_pressure.hpp
│ │ ├── inc_torque.hpp
│ │ ├── inc_weight.hpp
│ │ └── inc_work.hpp
│ ├── Rotational_Dynamics
│ │ ├── inc_angular_acceleration.hpp
│ │ ├── inc_angular_velocity.hpp
│ │ └── inc_rotational_energy.hpp
│ └── Waves
│ ├── inc_frequency.hpp
│ ├── inc_period.hpp
│ └── inc_wave_speed.hpp
├── LICENSE
├── pyproject.toml
├── README.md
├── RUN.sh
├── src
│ └── main.cpp
├── tests
│ ├── Electricity
│ │ ├── test_capacitance.py
│ │ ├── test_capacitor_energy.py
│ │ ├── test_charge.py
│ │ ├── test_coulombs_law.py
│ │ ├── test_electricity_main.py
│ │ ├── test_ohms_law.py
│ │ └── test_power.py
│ ├── Energy
│ │ ├── test_efficiency.py
│ │ ├── test_energy_main.py
│ │ ├── test_heat_energy.py
│ │ ├── test_kinetic_energy.py
│ │ └── test_potential_energy.py
│ ├── Gravity
│ │ ├── test_escape_velocity.py
│ │ ├── test_gravitational_acceleration.py
│ │ ├── test_gravitational_force.py
│ │ ├── test_gravitational_potential_energy.py
│ │ ├── test_gravity_main.py
│ │ ├── test_kelpers_third_law.py
│ │ └── test_orbital_velocity.py
│ ├── Mechanics
│ │ ├── test_acceleration.py
│ │ ├── test_average_velocity.py
│ │ ├── test_density.py
│ │ ├── test_force.py
│ │ ├── test_hookes_law.py
│ │ ├── test_mechanics_main.py
│ │ ├── test_momentum.py
│ │ ├── test_power.py
│ │ ├── test_pressure.py
│ │ ├── test_torque.py
│ │ ├── test_weight.py
│ │ └── test_work.py
│ ├── Rotational_Dynamics
│ │ ├── test_angular_acceleration.py
│ │ ├── test_angular_velocity.py
│ │ ├── test_rotational_dynamics_main.py
│ │ └── test_rotational_energy.py
│ ├── RUN_TESTS.sh
│ └── Waves
│ ├── test_frequency.py
│ ├── test_period.py
│ ├── test_waves_main.py
│ └── test_wave_speed.py
├── TODO.md
└── UPDATE_PIP.sh
MIT License -> Check LICENSE.