Writing R Extensions

Total Page:16

File Type:pdf, Size:1020Kb

Writing R Extensions Writing R Extensions Version 2.1.0 (2005-04-18) R Development Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copy- right notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the condi- tions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Development Core Team. Copyright c 1999–2005 R Development Core Team ISBN 3-900051-11-9 i Table of Contents Acknowledgements ........................................ 1 1 Creating R packages .................................... 2 1.1 Package structure ............................................................. 2 1.1.1 The ‘DESCRIPTION’ file .................................................... 2 1.1.2 The ‘INDEX’ file ........................................................... 4 1.1.3 The ‘install.R’ and ‘R_PROFILE.R’ files ................................... 5 1.1.4 Package subdirectories .................................................... 5 1.1.5 Package bundles .......................................................... 7 1.2 Configure and cleanup ......................................................... 7 1.2.1 Using ‘Makevars’ ......................................................... 9 1.2.2 Configure example ....................................................... 10 1.3 Checking and building packages ............................................... 12 1.3.1 Checking packages ....................................................... 12 1.3.2 Building packages ........................................................ 13 1.3.3 Customizing checking and building ........................................ 14 1.4 Writing package vignettes ..................................................... 14 1.5 Submitting a package to CRAN ................................................ 15 1.6 Package name spaces ......................................................... 16 1.6.1 Specifying imports and exports ........................................... 16 1.6.2 Registering S3 methods .................................................. 17 1.6.3 Load hooks.............................................................. 17 1.6.4 An example ............................................................. 17 1.6.5 Summary – converting an existing package ................................. 18 1.6.6 Name spaces with formal classes and methods.............................. 18 1.7 Writing portable packages..................................................... 19 1.8 Diagnostic messages .......................................................... 20 1.9 Localization.................................................................. 21 1.9.1 C-level messages ......................................................... 21 1.9.2 R messages .............................................................. 22 1.10 Package types ............................................................... 22 1.10.1 Frontend ............................................................... 22 1.10.2 Translation............................................................. 22 2 Writing R documentation files ......................... 24 2.1 Rd format ................................................................... 24 2.1.1 Documenting functions ................................................... 24 2.1.2 Documenting data sets ................................................... 27 2.1.3 Documenting S4 classes and methods...................................... 28 2.2 Sectioning ................................................................... 29 2.3 Marking text................................................................. 29 2.4 Lists and tables .............................................................. 30 2.5 Cross-references .............................................................. 31 2.6 Mathematics ................................................................. 31 2.7 Insertions .................................................................... 32 2.8 Indices ...................................................................... 32 2.9 Platform-specific documentation ............................................... 32 ii 2.10 Encoding ................................................................... 33 2.11 Processing Rd format ........................................................ 33 3 Tidying and profiling R code........................... 34 3.1 Tidying R code .............................................................. 34 3.2 Profiling R code .............................................................. 34 4 System and foreign language interfaces ................. 37 4.1 Operating system access ...................................................... 37 4.2 Interface functions .C and .Fortran ........................................... 37 4.3 dyn.load and dyn.unload .................................................... 39 4.4 Registering native routines .................................................... 40 4.5 Creating shared objects ....................................................... 41 4.6 Interfacing C++ code.......................................................... 42 4.7 Handling R objects in C ...................................................... 43 4.7.1 Handling the effects of garbage collection .................................. 45 4.7.2 Allocating storage ....................................................... 46 4.7.3 Details of R types........................................................ 46 4.7.4 Attributes ............................................................... 47 4.7.5 Classes.................................................................. 49 4.7.6 Handling lists............................................................ 49 4.7.7 Finding and setting variables ............................................. 50 4.7.8 Named objects and copying............................................... 51 4.8 Interface functions .Call and .External....................................... 52 4.8.1 Calling .Call ........................................................... 52 4.8.2 Calling .External ....................................................... 53 4.8.3 Missing and special values ................................................ 54 4.9 Evaluating R expressions from C .............................................. 55 4.9.1 Zero-finding ............................................................. 57 4.9.2 Calculating numerical derivatives ......................................... 58 4.10 Parsing R code from C ...................................................... 61 4.11 Debugging compiled code .................................................... 61 4.11.1 Finding entry points in dynamically loaded code .......................... 61 4.11.2 Inspecting R objects when debugging..................................... 62 5 The R API: entry points for C code .................... 64 5.1 Memory allocation ........................................................... 64 5.1.1 Transient storage allocation............................................... 64 5.1.2 User-controlled memory .................................................. 65 5.2 Error handling ............................................................... 65 5.2.1 Error handling from FORTRAN .......................................... 65 5.3 Random number generation ................................................... 66 5.4 Missing and IEEE special values ............................................... 66 5.5 Printing ..................................................................... 66 5.5.1 Printing from FORTRAN ................................................ 67 5.6 Calling C from FORTRAN and vice versa ...................................... 67 5.7 Numerical analysis subroutines ................................................ 68 5.7.1 Distribution functions .................................................... 68 5.7.2 Mathematical functions .................................................. 69 5.7.3 Numerical Utilities ....................................................... 69 5.7.4 Mathematical constants .................................................. 71 5.8 Optimization................................................................. 71 5.9 Integration................................................................... 72 iii 5.10 Utility functions............................................................. 73 5.11 Internationalization.......................................................... 75 5.12 Allowing interrupts .......................................................... 75 5.13 Platform and version information ............................................. 75 5.14 Inlining C functions ......................................................... 76 5.15 Using these functions in your own C code ..................................... 76 5.16 Organization of header files .................................................. 77 6 Generic functions and methods ........................ 78 6.1 Adding new generics .......................................................... 79 7 Linking GUIs and other front-ends to R ................ 80 7.1 Embedding R under Unix-alikes ..............................................
Recommended publications
  • Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information
    Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information Index A bold page number indicates where a term is deined. abstract syntax tree, 105 C, 35, 45, 189 abstraction, 29, 141 C♯,35 see also model C++, 35, 190 agile, 64, 159, 198 camel case, 89 algorithm, 29, 147, 148, 196 change, 141, 144, 197 Alice, 44 checklist, 127 arguments, 25,28 cloud, 66 functions as, 45 code order of, 108 commented-out, 62 type of, 41, 108 completion, 52,90 assert, 71 dead, 64 assignment, 131 line length, 99 vs. comparison, 126 reputable body of, 46, 63, 94, 99 Atom, 18 spaghetti, 98, 122 autocompletion, 52,90 unreachable, 64 autosave, 57 code sense, 3, 133 coding, 4 backups, 65 coding dojo, 153 bar, see metasyntactic variable coding interview, 148 BASIC, 44, 125 command line, 15, 49 baz, see metasyntactic variable comment, 27, 70, 85–88 BlueJ, 44, 54 commenting-out, 62 breakpoint, 111 comparison bug, 32, 101, 190, 191 of booleans, 126 after removing, 124 of objects, 130 avoiding, 138 vs. assignment, 126 avoiding recurrence of, 77 compiler, 13, 35 in compiler, 109 bug, 109 removing, 122 incremental, 51 the Lauren bug, 78 computational complexity, 148 see also debugging content assist, 52,90 build, 51, 53 contract, 88 202 © in this web service Cambridge University Press www.cambridge.org Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information Index 203 crash, 118 time, 146 currying, 23 user, 146 Emacs, 18, 49, 58, 90, 95 data science, 192 embedded
    [Show full text]
  • Section “Creating R Packages” in Writing R Extensions
    Writing R Extensions Version 3.1.0 Under development (2013-03-29) R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the con- ditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another lan- guage, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. Copyright c 1999{2013 R Core Team i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::: 1 1 Creating R packages:::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The `DESCRIPTION' file :::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing:::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3 The `INDEX' file :::::::::::::::::::::::::::::::::::::::::: 10 1.1.4 Package subdirectories:::::::::::::::::::::::::::::::::::: 11 1.1.5 Data in packages ::::::::::::::::::::::::::::::::::::::::: 14 1.1.6 Non-R scripts in packages :::::::::::::::::::::::::::::::: 15 1.2 Configure and cleanup :::::::::::::::::::::::::::::::::::::::: 16 1.2.1 Using `Makevars'::::::::::::::::::::::::::::::::::::::::: 19 1.2.1.1 OpenMP support::::::::::::::::::::::::::::::::::::
    [Show full text]
  • Section “Creating R Packages” in Writing R Extensions
    Writing R Extensions Version 3.0.0 RC (2013-03-28) R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the con- ditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another lan- guage, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. Copyright c 1999{2013 R Core Team i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::: 1 1 Creating R packages:::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The `DESCRIPTION' file :::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing:::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3 The `INDEX' file :::::::::::::::::::::::::::::::::::::::::: 10 1.1.4 Package subdirectories:::::::::::::::::::::::::::::::::::: 11 1.1.5 Data in packages ::::::::::::::::::::::::::::::::::::::::: 14 1.1.6 Non-R scripts in packages :::::::::::::::::::::::::::::::: 15 1.2 Configure and cleanup :::::::::::::::::::::::::::::::::::::::: 16 1.2.1 Using `Makevars'::::::::::::::::::::::::::::::::::::::::: 19 1.2.1.1 OpenMP support:::::::::::::::::::::::::::::::::::: 22 1.2.1.2
    [Show full text]
  • Writing R Extensions
    Writing R Extensions Version 4.1.1 Patched (2021-09-22) R Core Team This manual is for R, version 4.1.1 Patched (2021-09-22). Copyright c 1999{2021 R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into an- other language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::::::::::::::::::: 1 1 Creating R packages ::::::::::::::::::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The DESCRIPTION file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8 1.1.3 Package Dependencies::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3.1 Suggested packages:::::::::::::::::::::::::::::::::::::::::::::::::::::: 12 1.1.4 The INDEX file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 13 1.1.5 Package subdirectories :::::::::::::::::::::::::::::::::::::::::::::::::::::::
    [Show full text]
  • Year of the Horse. the Months of The
    here are many animals named in the Template of the Hidden Texts which appear anomalous to the context. It turns out they are Chinese years or Celtic symbols (such as salmon) or constellations. Also there are several codes which the word HORSE indicates. The months of the horse,which happen to be the same horses as those of the "apocalypse" (the "unveiling"), the constellations: of the winged horse Scheat of Pegasus, the colt Equulus the foal, the horse's blaze Kurnah in Cepheus, Hippocampus the seahorse, Leucippe the white horse, Alpha Andromeda and then there is the Year of the Horse. The months of the horse have far too many ciphers ~ nag, Dan, ornament, Ma, ears, Be, Elm, shoe, Ara, Bau and all the other words which mean Gemini, Cancer, Virgo, Libra/October, Scorpio and Sagittarius. Something big is slotted for Sagittarius. The White Horse Warning at Uffington is Sagittarius, complete with the large cross of the bow and arrow. Sagittarius is not shown at all on the zodiac column of St John The Divine. This forum is a collection of all the lines with the word horse or fourteen coded within them. Before we get started on the year which is the beginning of the end for our current lifestyle, a pertinent detail will be outlined. The matter of the "shar" of the Nibiru system. The shar is the "year", the orbit this solar system keeps. Many people have many different numbers of our years in one shart. It seems the Anakim (the biblical spelling for a civilization who have as many names as there are tribes on Earth) do have some control over their system.
    [Show full text]
  • A Glossary for IWGS (Auto-Generated)
    A Glossary for IWGS (Auto-Generated) Michael Kohlhase Computer Science, FAU Erlangen-Nürnberg https://kwarc.info/kohlhase July 1, 2021 Preface This document contains an English glossary for the course Informatische Werkzeuge in den Geistes- und Sozialwissenschaften at FAU Erlangen-Nürnberg (IWGS). It is automatically generated from the sources of the IWGS course notes and should be up-to-date with the course progress. The glossary contains definitions for all technical terms used in the course, both theones defined in the course, as well as the ones presupposed. The latter should be relatively few,since IWGS is intended as a beginner’s course. 1 1 Glossary for IWGS Given a description logic D, a D-ontology consists of D-ontology–a terminology (or TBox): concepts and roles and a set of concept axioms that describe them, and – assertions (or ABox): a set of individuals and statements about concept membership and role relationships for them. To make the role of arguments extremely clear, we write functions in λ-notation. For f = f(x; E) j x 2 Xg, where E is an expression, we write λx 2 X:E. n n-dim Cartesianλ-notation space n-dim Cartesian space: A := fha1; : : : ; ani j 1≤i≤n ) ai 2 Ag, call ha1; : : : ; ani a vector n-dimensional Cartesian space An n-dimensional Cartesian product A1 × ::: × An is called a n-dimensional Cartesian space n n over A (and denoted A ) iff Ai = A for some set A for all i. We call ha1; : : : ; ani 2 A a vector. n-fold Cartesian product Let A := fAi j 1≤i≤ng be a collection of sets, then the n-fold Cartesian product A1 × ::: × An is fha1; : : : ; ani j ai 2 Ai for all 1≤i≤ng, we call ha1; : : : ; ani 2 A1 × ::: × An an n-tuple.
    [Show full text]
  • Proceedings Chapter Reference
    Proceedings Chapter Featherweight Swift: A Core Calculus for Swift's Type System RACORDON, Dimitri, BUCHS, Didier Abstract Swift is a modern general-purpose programming language, designed to be a replacement for C-based languages. Although primarily directed at development of applications for Apple’s operating systems, Swift’s adoption has been growing steadily in other domains, ranging from server-side services to machine learning. This success can be partly attributed to a rich type system that enables the design of safe, fast, and expressive programming interfaces. Unfortunately, this richness comes at the cost of complexity, setting a high entry barrier to exploit Swift’s full potential. Furthermore, existing documentation typically only relies on examples, leaving new users with little help to build a deeper under- standing of the underlying rules and mechanisms. This paper aims to tackle this issue by laying out the foundations for a formal framework to reason about Swift’s type system. We introduce Featherweight Swift, a minimal language stripped of all features not essential to describe its typing rules. Featherweight Swift features classes and protocol inheritance, supports retroactive modeling, and emulates Swift’s [...] Reference RACORDON, Dimitri, BUCHS, Didier. Featherweight Swift: A Core Calculus for Swift’s Type System. In: Proceedings of the 13th ACM SIGPLAN International Conference on Software Language En- gineering (SLE ’20). 2020. Available at: http://archive-ouverte.unige.ch/unige:144345 Disclaimer: layout of this document may differ from the published version. 1 / 1 Featherweight Swift: A Core Calculus for Swift’s Type System Dimitri Racordon Didier Buchs University of Geneva University of Geneva Department of Computer Science Department of Computer Science Switzerland Switzerland [email protected] [email protected] Abstract ACM Reference Format: Swift is a modern general-purpose programming language, Dimitri Racordon and Didier Buchs.
    [Show full text]
  • Dina Karadžić & Vedran Gligo /'Fu:Bar/ 2015 /'Fu:Bar
    Dina Karadžić & Vedran Gligo /'fu:bar/ 2015 /'fu:bar/ - sometimes used as a placeholder name, a metasyntactic variable in computer programming or computer-related documentation / “Fucked up beyond all recognition” / a glitch art exhibition in Siva Galerija. /'fu:bar/ 2015 hosted over 80 international artists and /‘fu:bar/ 2016 is happening again this september in festival form, dedicated to the error as a form of artistic expression. http://fubar.space/ net.cube (timecapsule) timeCAPsule is a visionary virtual social space. In it you articulate your visions & wishes in the form of a dialogue with other anonymous users, asking and answering questions on utopian & dystopian alternate future, politics and ethics, idealism and nihilism ideologies, etc. By straining your imagination to foresee distant future and by expressing your mind you are encapsulating your current thoughts on future events in a timeCAPsule, which wraps around a constellation of ideas. After your login, you are invited to answer the first of the questions, by which you are unlocking every respective theme. Whilst you submit your answer, you can ask a question to another user, and keep that thread of thoughts in mind (and in your mailbox). Take care of your #userlink; you should save it till the timeCAPsule opens up, June 2042. Timecapsule is still under construction and was funded through the net.cube project. Net.cube started in January 2015 as part of the Centre for Drama Art programme to establish the conditions for Internet art projects and to encourage local Internet art production, its contextualization and mapping, as well as the communication among the interested parties.
    [Show full text]
  • Writing R Extensions
    Writing R Extensions Version 3.1.1 (2014-07-10) R Core Team This manual is for R, version 3.1.1 (2014-07-10). Copyright c 1999{2013 R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into an- other language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. i Table of Contents Acknowledgements :::::::::::::::::::::::::::::::::::::::::::::::: 1 1 Creating R packages::::::::::::::::::::::::::::::::::::::::::: 2 1.1 Package structure ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The DESCRIPTION file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 1.1.3 Package Dependencies :::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8 1.1.4 The INDEX file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 11 1.1.5 Package subdirectories ::::::::::::::::::::::::::::::::::::::::::::::::::::::: 11 1.1.6 Data in packages ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    [Show full text]
  • Principles and Practice of Big Data Principles and Practice of Big Data Preparing, Sharing, and Analyzing Complex Information Second Edition
    Principles and Practice of Big Data Principles and Practice of Big Data Preparing, Sharing, and Analyzing Complex Information Second Edition Jules J. Berman Academic Press is an imprint of Elsevier 125 London Wall, London EC2Y 5AS, United Kingdom 525 B Street, Suite 1650, San Diego, CA 92101, United States 50 Hampshire Street, 5th Floor, Cambridge, MA 02139, United States The Boulevard, Langford Lane, Kidlington, Oxford OX5 1GB, United Kingdom © 2018 Elsevier Inc. All rights reserved. No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or any information storage and retrieval system, without permission in writing from the publisher. Details on how to seek permission, further information about the Publisher’s permissions policies and our arrangements with organizations such as the Copyright Clearance Center and the Copyright Licensing Agency, can be found at our website: www.elsevier.com/permissions. This book and the individual contributions contained in it are protected under copyright by the Publisher (other than as may be noted herein). Notices Knowledge and best practice in this field are constantly changing. As new research and experience broaden our understanding, changes in research methods, professional practices, or medical treatment may become necessary. Practitioners and researchers must always rely on their own experience and knowledge in evaluating and using any information, methods, compounds, or experiments described herein. In using such information or methods they should be mindful of their own safety and the safety of others, including parties for whom they have a professional responsibility. To the fullest extent of the law, neither the Publisher nor the authors, contributors, or editors, assume any liability for any injury and/or damage to persons or property as a matter of products liability, negligence or otherwise, or from any use or operation of any methods, products, instructions, or ideas contained in the material herein.
    [Show full text]
  • The Latexinfo Documentation Format Version 1.7
    The LaTEXinfo Documentation Format Version 1.7 Richard M. Stallman and Robert J. Chassell The Free Software Foundation, 675 Massachusetts Ave., Cambridge MA, Michael Clarkson Centre for Earth and Space Science, York University, North York, Ontario, M3J 1P3 February 23, 1995 Copyright c 1988, 1990, 1991 Free Software Foundation, Inc. Copyleft c 1988, 1989, 1990, 1991 Michael E. Clarkson. a This is version 1.7 of the LTEXinfo documentation, and is for Version 18 of GNU Emacs. a This is the second edition of the LTEXinfo documentation, and is also consistent with version 2 of Texinfo documentation ‘texinfo.tex’. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another lan- guage, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation. Contents 1 Overview of LaTeXinfo 3 1.1 Advantages of LaTeXinfo over TeXinfo ....................... 4 1.2 Info files ........................................ 5 1.3 Printed Manuals ................................... 7 1.4 \-commands ...................................... 7 1.5 A Short Sample LaTeXinfo File ........................... 9 1.6 The Structure of this Manual ............................ 12 ILaTeX 13 2 Beginning a LaTeXinfo File 15 2.1 General Syntactic Conventions ........................... 15 2.2 What a LaTeXinfo File Must Have ........................
    [Show full text]
  • Beyond the Basic Stuff with Python
    BEYOND THE BASIC STUFF WITH PYTHON BEST PRACTICES FOR WRITING CLEAN CODE AL SWEIGART BEYOND THE BASIC STUFF WITH PYTHON BEYOND THE BASIC STUFF WITH PYTHON Best Practices for Writing Clean Code Al Sweigart San Francisco BEYOND THE BASIC STUFF WITH PYTHON. Copyright © 2021 by Al Sweigart. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN-13: 978-1-59327-966-0 (print) ISBN-13: 978-1-59327-967-7 (ebook) Publisher: William Pollock Executive Editor: Barbara Yien Production Editor: Maureen Forys, Happenstance Type-O-Rama Developmental Editor: Frances Saux Cover Design: Octopod Studios Interior Design: Octopod Studios Cover Illustration: Josh Ellingson Technical Reviewer: Kenneth Love Copyeditor: Anne Marie Walker Compositor: Happenstance Type-O-Rama Proofreader: Rachel Monaghan Indexer: Valerie Perry For information on book distributors or translations, please contact No Starch Press, Inc. directly: No Starch Press, Inc. 245 8th Street, San Francisco, CA 94103 phone: 1-415-863-9900; [email protected] www.nostarch.com Library of Congress Cataloging-in-Publication Data Library of Congress Cataloging-in-Publication Data Names: Sweigart, Al, author. Title: Beyond the basic stuff with python : best practices for writing clean code / Al Sweigart. Description: San Francisco, CA : No Starch Press, Inc., [2021] | Includes index. Identifiers: LCCN 2020034287 (print) | LCCN 2020034288 (ebook) | ISBN 9781593279660 (paperback) | ISBN 9781593279677 (ebook) Subjects: LCSH: Python (Computer program language) | Computer programming.
    [Show full text]