Developer Guide# Working Practices Working With PSyclone from GitHub Installation Test Suite Continuous Integration Performance Code Review System-specific Developer Set-up Installing PSyclone From GitHub Installing Documentation Tools Installing Testing Tools Coding and Documentation Style Documentation Style Coding Style Interface Description File Names and Directory Layout Integration Tests: Timing Results Comparison against baseline (last 10 entries) Elapsed time (last 10 entries) Historical results Implementation details The PSyclone Intermediate Representation (PSyIR) How to create new PSyIR Nodes The parent-child relationship Tree Copying Dynamic Tree Updates Selected Node Descriptions Comments attached to PSyIR Nodes Domain-Specific PSyIR The LFRic PSyIR The GOcean PSyIR PSyIR Types and Symbols DataTypes Symbols Copying Symbols and Symbol Tables Specialising Symbols Routine Interfaces PSyIR Back-ends Visitor Base code PSyIR Validation Available back-ends SIR back-end Back-ends for the PSy-layer Developing PSyKAL DSLs Parsing DSL Code (new approach) Parsing DSL Code (original approach) The PSy-Invokes-Invoke-InvokeSchedule tree Adding new Built-in operations to an API Module Manager FileInfo Caching Generic Code New APIs Existing APIs LFRic NEMO Dependency Analysis Tools PSyIR Dependency Analysis Methods PSyKAl Dependence Analysis Variable Accesses Loop Dependency Tools DefinitionUseChain SymPy SymPyWriter - Converting PSyIR to SymPy SymPyReader - Converting SymPy to PSyIr Transformations Kernel Transformations Raising Transformations Algorithm Transformations OpenACC OpenCL Inlining OpenMP Tasking with Taskloops OpenMP Tasking Moving to the new transformations options PSyData API Introduction to PSyData Classes Full Example API PSyDataTrans PSyDataNode PSyData Base Class PSyData Read-Only-Verification Base Class Profiling Kernel Extraction (PSyKE)